Предположим, я запускаю msbuild следующим образом:
function Clean-Sln {
param($sln)
MSBuild.exe $sln /target:Clean
}
Clean-Sln c:\temp\SO.sln
В шикарной консоли выводится в цветах. Это очень удобно - вы выбираете цвета, просто наблюдая за результатами. И, например, не важные сообщения серые.
Вопрос
Я бы хотел добавить возможность перенаправить его куда-нибудь так (упрощенный пример):
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
- Если я использую 'Консоль', командлет / функция
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, проблема касается любого приложения, которое записывает цветной вывод)