首页 > 解决方案 > 如何通过 ssh 从 powershell 脚本获取输出?

问题描述

出于某种原因,我似乎无法获得输出和重定向以通过 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

关于如何重定向脚本输出的任何想法?

我确实遇到了另一个在运行脚本时获取输出的问题是不同的目录,但这是另一天的战斗,另一个 Stack Overflow 帖子。我正在运行 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"

标签: windowspowershellssh

解决方案


我无法快速重新创建您的环境(Linux 主机/Windows 远程)。我至少尝试模仿跨平台环境(Linux VM 上的 powershell,Windows 上的 ssh 客户端)。以下是一些可能有用的注释,至少如果您打算将这些流放在文件中

与您不同,运行此命令时,我的终端上得到了相同的输出

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 远程协议与 ssh(如 Invoke-Command {echo 'hi'} -ComputerName YourMachine -Credentials $creds )


推荐阅读