Powershell日志已删除文件

时间:2013-08-29 17:14:28

标签: 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 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}*** 
    }
}

2 个答案:

答案 0 :(得分:2)

首先,您需要在脚本中使用log-message类型函数,该函数会将消息记录到.log文件中。然后chekc如果文件存在,如果不存在则创建一个文件。

然后在使用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 

    }
}

答案 1 :(得分:0)

你在这里有一个好的开始:

write-host “Deleting File $File” -foregroundcolor “Red”

不幸的是Remove-Item没有任何可以输出的输出,但是你已经创建了自己的输出消息,所以我们可以从中构建。您可以使用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 
}
...