我试图找到一种方法让我的脚本打印出实际被删除的文件的日志文件。有谁知道我怎么能这样做?这是我想要添加的屏幕。
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } |
Remove-Item -Force
答案 0 :(得分:1)
如果您只需要日志,最简单的方法就是使用Transcript
和详细输出。
您的脚本将如下所示,请务必注意在命令中添加-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".
答案 1 :(得分:1)
不幸的是,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 v3.0或更高版本,则Get-ChildItem
cmdlet支持-File
和-Directory
参数,因此您不需要需要做整个-not $_.PsIsContainer
的事情。
答案 2 :(得分:0)
你需要一个循环:
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
}
答案 3 :(得分:0)
将输出写入日志文件的最简单方法是使用 -Verbose,然后在命令后使用 Write-Verbose 或 4>
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } | Remove-Item -Verbose 4> $log_file_path