2016-12-29 2 views
0

비슷한 문제에 대한 답변을 몇 가지 보았지만 작동하지 못했습니다. 아마도 나는 V2의 powershell을 사용하고 있기 때문에 스트림을 리디렉션 할 수 없습니다. 내 질문은 간단하다, 나는 다음과 같은 스크립트에 제거 항목 cmdlet의 자세한 정보 스트림을 기록 할 :Powershell V2 - 로깅 제거 항목

$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) 및 오류 (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를 통해 그것을 모방 할 것이다 이유를 실패합니다.