В комментариях есть решение для более узких требований: сделать так, чтобы TFS показывал Write-Host
вывод без цветов, продолжал иметь цвета на локальном и не заменял все вызовы Write-Host
в коде на что-то другое.
Решение состоит в том, чтобы переопределить Write-Host
только для среды TFS, так что вызовы Write-Host
заканчиваются использованием некоторой поддерживаемой команды Write-
(например, Write-Verbose
или Write-Output
).
Таким образом, вы можете добавить это в начало вашего сценария powershell:
if($Env:BUILD_BUILDNUMBER) {
function Write-Host($object) {
Write-Output $object
}
}
Обратите внимание, что в этом подходе есть важное ограничение: если какая-либо функция использует Write-Host
и затем возвращает какое-либо значение, возвращаемое значение будет включать в себя все, что было отправлено на Write-Host
. Например, сравните значение $x
до переопределения Write-Host
и после:
function test() {
Write-Host "hi"
return "bye"
}
$x = test
Чтобы избежать этого, вы также можете использовать Write-Verbose
или любой другой Write-
вместо Write-Output
, но они не работают хорошо для не примитивных типов. Они либо выдают ошибку, либо просто показывают имя типа. Вы можете сделать $object.ToString()
внутри переопределения Write-Host
, чтобы предотвратить ошибки, но часто это может просто показать имя типа объекта.
Дополнительная информация о переменных env TFS: https://docs.microsoft.com/en-us/azure/devops/pipelines/scripts/powershell?view=azure-devops