Если вы захватываете выходные данные скрипта / функции, и этот скрипт / функция содержит сочетание выходных операторов 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:
соответственно).