簡體   English   中英

如何在 Powershell 中打印出我的刪除腳本的結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM