我有以下命令:
Get-ChildItem $build_path `
-Include *.bak, *.orig, *.txt, *.chirp.config `
-Recurse | Remove-Item -Verbose
清除VS解决方案的build文件夹中的某些文件。我使用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语句和Write-Host命令执行此操作,但我相信可以使用某些流水线操作或其他操作来完成。有什么想法吗?
答案 0 :(得分:6)
使用ForEach-Object
非常简单:
Get-ChildItem $build_path `
-Include *.bak, *.orig, *.txt, *.chirp.config `
-Recurse | foreach{ "Removing file $($_.FullName)"; Remove-Item $_}
正如@ user978511指出的那样,使用详细输出更复杂:
$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'
答案 1 :(得分: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
}
答案 2 :(得分:1)
为了能够修改您需要的消息,首先要输出不那么容易的输出。你可以参考这个页面上的答案: Powershell Invoke-Sqlcmd capture verbose output 抓住产量。从那以后,您可以修改消息并以您的格式显示它,但foreach选项对我来说更容易
答案 3 :(得分: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 ,以 Write-Output 开头。< / p>
| Tee-Object -FilePath $your_log_file -Append