如何在Powershell中打印删除脚本的结果
我正试图找到一种方法,让我的脚本打印出一个日志文件,其中记录了实际删除的文件。有人知道我该怎么做吗?这是我想要添加的屏幕如何在Powershell中打印删除脚本的结果,powershell,Powershell,我正试图找到一种方法,让我的脚本打印出一个日志文件,其中记录了实际删除的文件。有人知道我该怎么做吗?这是我想要添加的屏幕 Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } | Remove-Item -Force 如果只需要日志,最简单的方法是使用成绩单和详细输出 您的脚本如下所示,请确保注意在命令中添加-Verbose Start-Transcript C:
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } |
Remove-Item -Force
如果只需要日志,最简单的方法是使用
成绩单和详细输出
您的脚本如下所示,请确保注意在命令中添加-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".
如果只需要日志,最简单的方法是使用成绩单和详细输出
您的脚本如下所示,请确保注意在命令中添加-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".
您需要一个循环:
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
}
您需要一个循环:
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
}
不幸的是,Remove-Item
cmdlet不支持-Passthru
参数,这可能会使此操作更容易。但是,您可以这样做:
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } |
Tee-Object -FilePath .\Log.txt |
Remove-Item -Force
但这有点难看,因为它从getchilditem
输出目录列表。您可以这样做,只捕获路径:
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$.psContainer
之类的操作。不幸的是,Remove-Item
cmdlet不支持-Passthru
参数,这可能会使此操作更简单。但是,您可以这样做:
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } |
Tee-Object -FilePath .\Log.txt |
Remove-Item -Force
但这有点难看,因为它从getchilditem
输出目录列表。您可以这样做,只捕获路径:
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
参数,因此,您不需要执行整个-而不是$\p.psicContainer
操作。将输出写入日志文件的最简单方法是使用-Verbose,然后在命令后使用write Verbose或4>
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } | Remove-Item -Verbose 4> $log_file_path
将输出写入日志文件的最简单方法是使用-Verbose,然后在命令后使用write Verbose或4>
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } | Remove-Item -Verbose 4> $log_file_path
您可能只需要将-Verbose参数添加到Remove-Item cmdlet中。verbose语句将指示正在对文件执行删除文件操作以包括其完整路径。在运行该命令之前,您还可以在删除项的末尾添加一个quick-whatif
。它将打印出它将执行的操作,而不实际删除文件。它多次保存了my bacon。您可能只需要将-Verbose参数添加到Remove-Item cmdlet中。verbose语句将指示正在对文件执行删除文件操作以包括其完整路径。在运行该命令之前,您还可以在删除项的末尾添加一个quick-whatif
。它将打印出它将执行的操作,而不实际删除文件。它救了我好几次。