2016-12-29 9 views
0

私は同様の問題に対するいくつかの回答を見たことがありますが、そのうちのどれも動作させることはできません。おそらく、私はV2のPowerShellを使用しているので、ストリームをリダイレクトできません。私の質問は簡単ですが、私は次のスクリプトでは、Remove-Itemコマンドレットの詳細な流れを記録したい: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コマンドレットを持っているので、私はあなたがGet-Content-splitを経由して、それをエミュレートしたいと思う理由は失敗します。

関連する問題