File Powershell日志已删除文件

File Powershell日志已删除文件,file,powershell,logging,delete-file,File,Powershell,Logging,Delete File,脚本搜索所有文件夹和子文件夹,并在文件数大于5时删除最旧的文件。一切正常,但我还希望将所有删除文件作为记录记录记录在日志文件中。 如何记录已删除的文件 这里是脚本 $path = "C:\test\1" $keep = 3 $strLogFileName = "c:\test\yourlogfile.log"; $dirs = Get-ChildItem -Path $path -Recurse | Where-Object {$_.PsIsContainer} foreach ($dir

脚本搜索所有文件夹和子文件夹,并在文件数大于5时删除最旧的文件。一切正常,但我还希望将所有删除文件作为记录记录记录在日志文件中。

如何记录已删除的文件

这里是脚本

$path = "C:\test\1"
$keep = 3
$strLogFileName   = "c:\test\yourlogfile.log";

$dirs = Get-ChildItem -Path $path -Recurse | Where-Object {$_.PsIsContainer}
foreach ($dir in $dirs) {
    $files = Get-ChildItem -Path $dir.FullName | Where-Object {-not $_.PsIsContainer -and $_.name -like "*.zip"}
    if ($files.Count -gt $keep) {
        $files | Sort-Object CreationTime -desc| Select-Object -First ($files.Count - $keep) | Remove-Item -Force 
    ***{write-host “Deleting File $File” -foregroundcolor “Red”; Remove-Item $File | out-null}*** 
    }
}

首先,在脚本中需要一个
log message
type函数将消息记录到.log文件中。然后检查文件是否存在,如果不存在,则创建一个文件

然后,在使用
Remove Item
命令删除文件之前,您可以使用
Log Message
功能将消息记录到日志文件中

% { (Log-Message "Deleting File $_"); $_ }
全本

$path = "C:\test\1"
$keep = 3
$strLogFileName   = "c:\test\yourlogfile.log";

function Log-Message
{
   Param ([string]$logtext)
   Add-content $strLogFileName -value $logtext
}

$dirs = Get-ChildItem -Path $path -Recurse | Where-Object {$_.PsIsContainer}
foreach ($dir in $dirs) {
    $files = Get-ChildItem -Path $dir.FullName | Where-Object {-not $_.PsIsContainer -and $_.name -like "*.zip"}
    if ($files.Count -gt $keep) {
        $files | Sort-Object CreationTime -desc| Select-Object -First ($files.Count - $keep) | 
        % { $dt=get-date;(Log-Message "Deleting File $_  on  $dt");$_ }| Remove-Item -Force 

    }
}

您在这里有了一个良好的开端:

write-host “Deleting File $File” -foregroundcolor “Red”
不幸的是,
Remove Item
没有任何可用于mooch的输出,但您已经生成了自己的输出消息,因此我们可以从中进行构建。您可以使用
Out file
将任何输出通过管道传输到文件。append标志将新内容附加到文件的末尾,您不必检查文件是否存在

Write-Output “Deleting File $File” | Out-File -Append logfile.txt
如果您想要一个较短的行,您甚至不需要包含写输出

下面是一个示例,显示了需要在何处添加代码。我已将现有代码标记为“…”,并将删除消息移动到一个变量中,以便您可以在其他位置重用它。这假定您已将所选文件名存储在变量中

...
if ($files.Count -gt $keep) 
{
    ...
    $message = "Deleting File $File at "+(Get-Date)
    $message | Out-File -Append logfile.txt 
}
...

好的,看起来很完美,但是你能告诉我如何将每个文件的删除文件的日期时间添加到日志中吗?你真是powershell的上帝:)最后一个问题,我如何只删除最旧的文件而不删除最新的文件?谢谢你的帮助我找到了:Sort Object LastWriteTime我再次需要你的帮助。现在不应该删除zip文件,而应该删除更高一级的文件夹。这里是文件夹路径:\\xxx\xu\207\Archiv\20080101您能再帮我一次吗?许多的thx@zero1de你应该在一个新问题中提出这个新问题,并投票表决和/或接受解决你以前问题的答案。在没有适当赞扬他的情况下串通Mitul是非常粗鲁的,可能会阻止用户将来帮助您。