Как получить вывод из сценария powershell через ssh? - PullRequest
0 голосов
/ 17 октября 2018

Почему-то я не могу получить вывод и перенаправление для работы через ssh из linux в Windows.У меня есть скрипт powershell, который выводит только сообщение в каждом потоке.

Из терминала powershell это выглядит так:

$ ssh me@windows.box.com
PS C:\Users\me> C:/"Program Files"/App3/bin/script.ps1 2> $null
This is output
This is to host
WARNING: This is a warning!
PS C:\Users\me> C:/"Program Files"/App3/bin/script.ps1 *>&1 2> $null
This is output
This is to host
WARNING: This is a warning!
C:\"Program Files"\App3\bin\script.ps1 : This is an error
At line:1 char:1
+ C:/"Program Files"/App3/bin/script.ps1 *>&1 2> $null
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,script.ps1

Но по какой-то причине из команд ssh я не могу перенаправить другие потоки на стандартный вывод:

$ ssh me@windows.box.com "C:/\\\"Program Files\\\"/App3/bin/script.ps1" 2>/dev/null
This is output
This is to host
WARNING: This is a warning!
$ ssh me@windows.box.com "C:/\\\"Program Files\\\"/App3/bin/script.ps1 *>&1" 2>/dev/null
This is output
This is to host
WARNING: This is a warning!

И чтобы пояснить, что это, похоже, проблема, специфичная для скрипта:

$ ssh me@windows.box.com "Write-Host \\\"This is to host\\\""
This is to host
$ ssh me@windows.box.com "Write-Output \\\"This is output\\\""
This is output
$ ssh me@windows.box.com "Write-Warning \\\"This is a warning\!\\\""
WARNING: This is a warning\!
$ ssh me@windows.box.com "Write-Error \\\"This is an error\\\""
Write-Error "This is an error" : This is an error
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException

Есть идеи, как перенаправить вывод скрипта?

Я столкнулся с другой проблемой с получениемпри запуске скрипта выводятся разные каталоги, но это битва за другой день, еще один пост переполнения стека.Я использую RHEL, и содержимое сценария:

Write-Output "This is output"
Write-Host "This is to host"
Write-Verbose "This message is definitely more verbose"
Write-Debug "This is marked debug"
Write-Warning "This is a warning!"
Write-Error "This is an error"

1 Ответ

0 голосов
/ 18 октября 2018

Я не могу быстро воссоздать вашу среду (хост Linux / Windows Remote).Я попытался по крайней мере имитировать кроссплатформенную среду (powershell на Linux linux, ssh клиент на Windows)Вот некоторые заметки, которые могут быть полезны, по крайней мере, если вы планируете получать эти потоки в файл

В отличие от вас, я получаю такой же вывод на своем терминале при запуске этого

ssh mike@Ubuntu "/snap/bin/pwsh ./test.ps1 *>&1"  (on local)
pwsh ./test.ps1 *>&1  (on remote)

ХотяУ меня возникла похожая проблема при попытке перенаправить вывод в файл через ssh (но он работает, если вызывается из сеанса powershell)

 ssh mike@Ubuntu "/snap/bin/pwsh ./test.ps1 *>&1 test.log" 
  #adds only original success to the file, and prints error on terminal

Так что похоже, что перенаправление потока в поток не работает, если вызывается через ssh.Хотя каким-то образом поток в файл, казалось, работал

 ssh mike@Ubuntu "/snap/bin/pwsh ./test.ps1 >test.log  2>>test.log" 
 ssh mike@Ubuntu "/snap/bin/pwsh ./test.ps1" &> test.log #redirection works again on local

Так что может быть какая-то странная ошибка взаимодействия ssh / powershell.Вы можете попытаться использовать стандартный протокол ps remoting против ssh (например, Invoke-Command {echo 'hi'} -ComputerName YourMachine -Credentials $ creds)

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