如何在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
。它将打印出它将执行的操作,而不实际删除文件。它救了我好几次。