2013-08-29 67 views
2

腳本搜索所有文件夾和子文件夾,並在文件數大於5時刪除最舊的文件。一切工作正常,但我也想記錄所有的刪除文件記錄在一個日誌文件。Powershell日誌刪除文件

如何記錄已刪除的文件?

這裏的腳本。

$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}*** 
    } 
} 

回答

0

你已經有了一個良好的開端這裏:

write-host 「Deleting File $File」 -foregroundcolor 「Red」 

可惜Remove-Item沒有,你可以從任何揩油輸出,但你已經制作了你自己的輸出消息,所以我們可以從中構建。您可以使用Out-File將任何輸出傳輸到文件。追加標誌會將新內容附加到文件末尾,而不必檢查文件是否存在。

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 
} 
... 
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 

    } 
} 
+0

O.k看起來很完美,但你能告訴我如何添加日期時間爲每個文件的刪除文件進入日誌? – zero1de

+0

檢查我更新的答案。我還添加了日期。 – Mitul

+0

你真的是PowerShell的神:)最後一個問題,我怎樣才能刪除最舊的文件而不是最新的?許多thx爲您的幫助 – zero1de