我已经看到了类似问题的一些答案,但我无法让它们中的任何一个起作用。可能是因为我使用了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
答案 0 :(得分:1)
PowerShell v2仅允许重定向Success(STDOUT)和Error(STDERR)输出流。 Redirection for other streams是not 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
模拟它的原因。