Правильно предоставьте разделенную потоковую обратную связь от удаленной команды вызова PowerShell 5.1

#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 не упоминает об этом, поэтому я хотел убедиться, что не упустил что-то очевидное-или, в противном случае, предоставить что-то похожее на документацию.