Powershell V2 - 记录删除项目

时间:2016-12-29 13:47:40

标签: logging powershell-v2.0 cmdlet

我已经看到了类似问题的一些答案,但我无法让它们中的任何一个起作用。可能是因为我使用了PowerShell的V2并且无法重定向流。我的问题很简单,我希望在以下脚本中记录详细的remove-item cmdlet流:

$CSVList = (Get-Content "C:\Users\Leeds TX 11\Desktop\Test folder\Watchfolder\DAZN Production Numbers - purgelist.csv" | select -Skip 1) -split ','| Where {$_}

$Netappdirectory = "C:\Users\Leeds TX 11\Desktop\Test folder\NetApp"
$Logfile = "C:\Users\Leeds TX 11\Desktop\Test folder\logfile.txt"

Get-ChildItem $Netappdirectory |
  Where-Object {$CSVList -contains $_.BaseName} |
  Remove-Item -Verbose

1 个答案:

答案 0 :(得分:1)

PowerShell v2仅允许重定向Success(STDOUT)和Error(STDERR)输出流。 Redirection for other streamsnot available prior to PowerShell v3。此外,Remove-Item没有用于为详细(或调试)输出定义变量的参数,因此您无法像警告和错误输出那样在变量中捕获该输出。

如果您无法升级到PowerShell v3或更新版本,则最佳选择可能是创建transcript操作:

Start-Transcript $Logfile -Append
Get-ChildItem $Netappdirectory | ... | Remove-Item -Verbose
Stop-Transcript

否则,您需要在单独的PowerShell进程中运行该操作。当输出返回到父进程时,其他外部进程流被损坏到成功和错误输出流(STDOUT,STDERR)中。

powershell.exe -Command "&{Get-ChildItem $Netappdirectory | ... | Remove-Item -Verbose}" >> $Logfile

但这是一个相当丑陋的方法,所以我不推荐它。

旁注:即使PowerShell v2也有Import-Csv cmdlet,因此我无法理解您希望通过Get-Content-split模拟它的原因。