如何在Powershell中打印出删除脚本的结果

时间:2017-12-07 15:47:16

标签: powershell

我试图找到一种方法让我的脚本打印出实际被删除的文件的日志文件。有谁知道我怎么能这样做?这是我想要添加的屏幕。

Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } |
    Remove-Item -Force 

4 个答案:

答案 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