[英]How do I print out the results of my delete script in Powershell
我試圖找到一種方法讓我的腳本打印出實際刪除哪些文件的日志文件。 有誰知道我該怎么做? 這是我的屏幕,我想將其添加到屏幕上。
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } |
Remove-Item -Force
如果您只需要日志,最簡單的方法是使用Transcript
和 Verbose Output。
您的腳本看起來像這樣,請確保您注意將-Verbose
到您的命令中。
Start-Transcript C:\Logs\Remove.txt
Some-Command | Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } | Remove-Item -Force -Verbose
Stop-Transcript
然后C:\\Logs\\Remove.txt
文件將為每個刪除的文件顯示如下消息:
VERBOSE: Performing the operation "Remove File" on target "H:\dns.csv".
不幸的是, Remove-Item
cmdlet 不支持-Passthru
參數,這可能會使這更容易。 但是,您可以這樣做:
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } |
Tee-Object -FilePath .\Log.txt |
Remove-Item -Force
但這有點難看,因為它從Get-ChildItem
輸出目錄列表。 您可以這樣做來僅捕獲路徑:
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } |
Select-Object -ExpandProperty FullName |
Tee-Object -FilePath .\Log.txt |
Remove-Item -Force
另請注意,如果你使用的PowerShell 3.0或更高版本中, Get-ChildItem
cmdlet支持的-File
和-Directory
參數,所以你不需要做全-not $_.PsIsContainer
東西。
你需要一個循環:
Get-ChildItem -Path $Targets |
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } |
ForEach-Object {
$_ | Remove-Item -Force
$_.FullName | Out-File -FilePath $LogFile -Append
}
將輸出寫入日志文件的最簡單方法是使用 -Verbose,然后在命令后使用 Write-Verbose 或 4>
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } | Remove-Item -Verbose 4> $log_file_path
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.