#powershell #powershell-5.1
Вопрос:
PowerShell разработан для поддержки и поддержки стиля потокового вывода (где вывод и отзывы пользователей становятся доступными по мере их создания, а не сбрасываются по завершении сценария). PowerShell предоставляет различные Write
командлеты, их потоки и функции перенаправления для включения этого стиля.
Однако при использовании Invoke-Command
поведение перенаправления потока при работе в удаленном сеансе PSS варьируется в зависимости от используемого потока.
Например:
# Information redirect works as expected when invoking locally
>Invoke-Command { 'output'; Write-Host 'info' } 6>$Null
output
# Information redirect gets ignored when invoking remotely
# (assuming a remote session has already been created as $session)
>Invoke-Command -Session $session { 'output'; Write-Host 'info' } 6>$Null
output
info
( Write-Host
используется для простоты, то же самое поведение происходит при использовании Write-Information -InformationAction Continue
)
Эксперименты показывают, что поведение потока зависит от потока:
- Успех (1) и ошибка (2) перенаправление вывода в обычном режиме
- Предупреждение (3) и Подробный (4) вывод безусловно аналогичны информации (6), но их форматирование сохранено
- Отладка (5) перенаправляет как обычно (хотя приглашение на продолжение не перенаправляет)
Я вижу несколько пользовательских способов настройки потоковой передачи, которые впоследствии могут быть легко отфильтрованы (например, успешный вывод с идентифицирующим префиксом).
Существует ли хороший способ потоковой передачи отдельных выходных данных и отзывов от удаленной команды, которые соответствовали бы какой-либо форме общих методов PowerShell, или способ заставить перенаправление вести себя так, как ожидалось?
Комментарии:
1. К сожалению, эта проблема существует уже довольно давно, возможно, всегда; она подробно обсуждается в выпуске GitHub №9585 . Начиная с PowerShell 7.2, я не знаю хорошего обходного пути.
2. @mklement0 — У меня было ощущение, что это так, но я не видел никаких соответствующих вопросов SO, а документация по потокам, перенаправлению и
Invoke-Command
не упоминает об этом, поэтому я хотел убедиться, что не упустил что-то очевидное-или, в противном случае, предоставить что-то похожее на документацию.