2011-12-29 10 views
5

の詳細な出力をフォーマット私は、次のコマンドを持っている:VSソリューションのビルドフォルダからいくつかのファイルを消去するにはは、Remove-Itemコマンド

Get-ChildItem $build_path ` 
    -Include *.bak, *.orig, *.txt, *.chirp.config ` 
    -Recurse | Remove-Item -Verbose 

を。 Verboseスイッチを使用して、どのファイルが削除されているかを確認できます。それが正常に動作しますが、出力はあまりにも冗長です:

VERBOSE: Performing operation "Remove File" on Target "R:\Visual Studio 2010\Projects\SomeProject\SomeProject.Web.build\App_Readme\glimpse.mvc3.readme.txt". 
VERBOSE: Performing operation "Remove File" on Target "R:\Visual Studio 2010\Projects\SomeProject\SomeProject.Web.build\App_Readme\glimpse.readme.txt". 

私はちょうどそのような何かを参照する必要があります:

Removing file \App_Readme\glimpse.mvc3.readme.txt". 
Removing file \App_Readme\glimpse.readme.txt". 
... 

私はforeach文と書き込み-hostコマンドでこれを行うことができます知っているが、しかし、私はそれがいくつかのパイプラインや何かで行うことができると信じています。何か案は?

答えて

6

に簡単に見えますが非常に簡単です:@ user978511が指摘したように

Get-ChildItem $build_path ` 
    -Include *.bak, *.orig, *.txt, *.chirp.config ` 
    -Recurse | foreach{ "Removing file $($_.FullName)"; Remove-Item $_} 

、詳細出力を使用することがありますより複雑:

$ps = [PowerShell]::Create() 

$null = $ps.AddScript(@' 
    Get-ChildItem $build_path ` 
     -Include *.bak, *.orig, *.txt, *.chirp.config ` 
     -Recurse | Remove-Item -Verbose 
'@) 

$ps.Invoke() 
$ps.Streams.Verbose -replace '(.*)Target "(.*)"(.*)','Removing File $2' 
+0

私はパイプラインでforeachを使用できるかどうかわかりませんでした。ありがとう。 – lalibi

1

最初に必要なメッセージを修正するには、それほど簡単ではない出力を出力します。このページの答えを参照することができます: Powershell Invoke-Sqlcmd capture verbose output 出力をキャッチします。そこから、あなたがメッセージを変更することができますにし、あなたの形式でそれを示しているが、foreachのオプションがForEach-Objectを使用して、私

3

のPowerShell 3.0で使用すると、出力ストリームに冗長ストリームを書き込むことができます(例:4> & 1)、次に置き換えるメッセージ:

Get-ChildItem $build_path ` 
    -Include *.bak, *.orig, *.txt, *.chirp.config ` 
    -Recurse | Remove-Item -Verbose 4>&1 | Foreach-Object{ ` 
     Write-Host ($_.Message -replace'(.*)Target "(.*)"(.*)','Removing File $2') -ForegroundColor Yellow 
} 
1

これは数年遅れていますが、私のようにこれを抱いている誰かを助けるかもしれないので、とにかくそれを提供します。

私はファイルの削除を試み、成功または失敗を報告します。以下を参照してください:

$FileList = $build_path ` 
    -Include *.bak, *.orig, *.txt, *.chirp.config ` 
    -Recurse 

foreach ($File in $FileList) 
{ 
    Try 
    { 
     Remove-Item $File.FullName -Force -ErrorAction Stop 
     Write-Output "Deleted: $($File.Parent)\$($File.Name)" 
    } 
    Catch 
    { 
     Write-Output "Error deleting: $($File.Parent)\$($File.Name); Error Message: $($_.Exception.Message)" 
    } 
} 

あなたは上記書き込み出力で始まる各行の終わりにティーオブジェクトを使用することができますコンソールとファイルにログを記録するように両方の出力したい場合。

| Tee-Object -FilePath $your_log_file -Append 
関連する問題