2016-12-29 2 views
0

Я видел несколько ответов на подобные проблемы, однако я не могу заставить их работать. Возможно, поскольку я использую V2 powershell и не могу перенаправить потоки. Мой вопрос прост, я хочу войти в многословный поток Remove-Item командлет в следующем скрипте:Powershell V2 - Logging remove-item

$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

PowerShell v2 позволяет только перенаправление успеха (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. Дополнительные потоки внешних процессов искажаются в потоки вывода Success и Error (STDOUT, STDERR), когда вывод возвращается в родительский процесс.

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

Это довольно уродливый подход, хотя, поэтому я бы не рекомендовал его.


Side Примечание: Даже PowerShell v2 имеет Import-Csv командлет, так что я не понимаю, почему вы хотели бы подражать его через Get-Content и -split.

Смежные вопросы