Возможно, в PowerShell это невозможно сделать.
Если у меня есть файл verboseTest.ps1
[CmdletBinding()] # CmdletBinding attribute enables -verbose flag
Param()
Write-Verbose 'verbose test'
Если я позвоню .\verboseTest.ps1
, я не увижу ничего, как ожидалось.
Если я позвоню .\verboseTest.ps1 -Verbose
, я увижу вывод.
VERBOSE: подробный внешний тест
как и ожидалось.
Но если я позвоню .\verboseTest.ps1 4>&1
, я не позвоню. Многословный поток потерян.
Теперь Info ведет себя совершенно по-другому.
У меня есть файл infoTest.ps1
и он ведет себя вменяемо.
[CmdletBinding()] # Add CmdletBinding attribute
Param()
Write-Information 'info test outer'
Если я позвоню .\infoTest.ps1
, я не увижу ничего, как ожидалось.
Если я вызову .\infoTest.ps1 -InformationAction 'Continue'
, аналогичный флагу -Verbose
, он преуспеет и выведет info test outer
на консоль.
И если я вызову .\infoTest.ps1 6>&1
, он также выведет info test outer
на консоль! Так что как-то "информационный" поток ведет себя совершенно иначе, чем "многословный" поток.
Поведение информационного потока имеет смысл. Команды записи информации записывают в поток, и я могу перенаправить его или просмотреть или нет, как я считаю нужным. В "многословном" нет! Я должен включить отображение его на выходе, чтобы перенаправить его? Я делаю что-то неправильно? Как это понять?
Должен ли я должен включать подробные настройки для перенаправления вывода? И если да, могу ли я сделать это внутри метода или он меняет его глобально для всего сеанса?