Написание командлета C# PowerShell — как вывести журнал отладки в вызывающую программу TeamCity

Я пишу командлет PowerShell на C#, и мне нужно добавить в сценарий журнал диагностики, чтобы я мог оценить поведение через TeamCity. Поэкспериментировав с WriteVerbose с включенным для функции флагом -Verbose, в TeamCity ничего не зарегистрировано.

Что эквивалентно Write-Host для командлета?

В чем разница между следующими командлетами:

  • WriteCommandDetail
  • WriteProgress
  • WriteVerbose
  • ЗаписьОтладка
  • НаписатьПредупреждение
  • WriteError
  • ЗаписатьОбъект

person Dech    schedule 03.07.2018    source источник
comment
Боковое примечание: я только что прочитал, что $VerbosePreference по умолчанию имеет значение SilentlyContinue, чтобы отобразить подробное ведение журнала, вам нужно установить для этой переменной как минимум значение «Продолжить». Вызова -Verbose в командлете было недостаточно, однако может помочь его установка в родительском сценарии PS: $Global:VerbosePreference=Continue Выполняется тестирование   -  person Dech    schedule 03.07.2018


Ответы (1)


На случай, если кто-то еще столкнется с этой проблемой, вот что я узнал: PowerShell поддерживает множество различных выходных потоков.

Однако тот, за которым следует TeamCity, не является ни одним из вышеперечисленных, [C#] Console.WriteLine достаточно для регистрации в журнале трассировки TeamCity.

Чтобы ответить на мой предыдущий вопрос:

WriteError используется для правильного возврата исключений (это работает хорошо, хотя и немного запутанно, простое использование C# throw приведет к сбою PowerShell при отладке командлета).

WriteObject используется для возврата пользовательских или существующих объектов C# из командлета в назначение переменной (например, [PowerShell] $x = Do-Something, где [C#] WriteObject(Output) будет возвращен в [PowerShell] $x).

WriteInformation (новое в PowerShell 5) — это новый способ записи в поток вывода. Write-Output теперь перенаправляется в поток информации.

person Dech    schedule 10.07.2018