Стандартный вывод в отладочную консоль PowerShell - PullRequest
0 голосов
/ 30 июня 2018

У меня есть длинный скрипт в powershell, который вызывает еще более длинную функцию, расположенную в отдельном файле .ps1. Функция запускает несколько команд svn update и некоторые скомпилированные исполняемые файлы, которые выдают стандартный вывод. Когда я запускаю их прямо из скрипта, вывод перенаправляется на консоль отладки в Powershell ISE. Когда я запускаю их через функцию, я могу сказать, что они работают, но я не получаю стандартный вывод в консоли.

Как перенаправить стандартный вывод из моей функции обратно на консоль отладки powershell, где я ее вижу?

Спасибо.

EDIT

Я импортирую функцию следующим образом:

. "D:\common.ps1"

и вызывая его следующим образом:

$MedianValue = Run-Comparison $LastRev $FirstRev $ScriptPath $SolutionPath $DevenvPath $TestPath $refFile $SVNPAth

Внутри функции один из вызовов выглядит следующим образом

svn update $FirstRev Start-Process ExecutableName Argument

Именно для двух приведенных выше операторов я не вижу стандартный вывод при вызове их содержащей функции.

1 Ответ

0 голосов
/ 30 июня 2018

Если вы захватываете выходные данные скрипта / функции, и этот скрипт / функция содержит сочетание выходных операторов PowerShell и вызовов внешних программ, производящих вывод stdout, оба типа вывода отправляются в PowerShell регулярные успешные выходные потоки.

Следовательно, , если вы не перенаправите на источник , вы не можете выборочно передавать стандартный вывод из внешних программ на хост (например, обычное окно консоли или консоль). панель в ISE) , потому что вы не сможете сказать, какие выходные объекты (линии) откуда.

Для перенаправления на источник - если у вас есть контроль над исходным кодом вызываемого абонента - у вас есть несколько вариантов, самый простой из которых Write-Host, как показано в следующем примере:

function Run-Comparison {
  'PS success output'
  cmd /c 'echo external stdout output' | Write-Host
}

# Captures 'PS success output', but passes the cmd.exe output through to the console.
$MedianValue = Run-Comparison

Вышеизложенное выборочно отправляет выходные данные команды cmd.exe на хост.

В PSv5 +, где Write-Host записывает во вновь введенный информационный поток (число 6), вы можете при желании подавить вывод на хост с помощью 6>$null при вызове.

Чтобы изменить логику, используйте Write-Information вместо Write-Host (только для PSv5 +), что по умолчанию является бесшумным и позволяет включать выход с помощью $InformationPreference = 'Continue'.

Если вам нужно поведение по умолчанию в PSv4-, используйте Write-Verbose или Write-Debug, но учтите, что такой вывод будет другого цвета, при этом каждая строка имеет префикс (VERBOSE: и DEBUG: соответственно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...