繁体   English   中英

如何通过ssh从powershell脚本获取输出?

[英]How to get output from powershell script over ssh?

出于某种原因,我似乎无法获得输出和重定向来通过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命令,我无法将其他流重定向到stdout:

$ 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"

我无法快速重新创建您的环境(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远程处理协议vs ssh(例如Invoke-Command {echo'hi'} -ComputerName YourMachine -Credentials $ creds)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM