假设我像这样运行 msbuild:
function Clean-Sln {
param($sln)
MSBuild.exe $sln /target:Clean
}
Clean-Sln c:\temp\SO.sln
在 Posh 控制台中,输出是彩色的。这非常方便 - 您只需通过观察输出来识别颜色。例如,不重要的消息是灰色的。
问题
我想添加将它重定向到这样的地方的能力(简化示例):
function Clean-Sln {
param($sln)
MSBuild.exe $sln /target:Clean | Redirect-AccordingToRedirectionVariable
}
$global:Redirection = 'Console'
Clean-Sln c:\temp\SO.sln
$global:Redirection = 'TempFile'
Clean-Sln c:\temp\Another.sln
- 如果我使用“控制台”,则 cmdlet/函数
Redirect-AccordingToRedirectionVariable
应该以与未通过管道输出相同的方式输出带有颜色的 msbuild 消息。换句话说 - 它应该保持输出不变。 - 如果我使用“TempFile”,
Redirect-AccordingToRedirectionVariable
会将输出存储在临时文件中。
甚至可能吗?我猜不是:| 或者您对如何实现目标有什么建议?
可能的解决方案:
if ($Redirection -eq 'Console) {
MSBuild.exe $sln /target:Clean | Redirect-AccordingToRedirectionVariable
} else {
MSBuild.exe $sln /target:Clean | Out-File c:\temp.txt
}
但是如果你想象可以有很多很多 msbuild 调用,那就不理想了。
不要害羞告诉我如何应对它的任何新建议;)
也欢迎任何有关重定向/着色/输出的背景信息。
(问题不是特定于 msbuild,问题涉及任何编写彩色输出的应用程序)