windows - 如何通过 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"
解决方案
我无法快速重新创建您的环境(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 )
推荐阅读
- c# - 在 WPF 中将数据网格与 SQL Server 数据库表绑定的两种方法
- django-cms - django-cms:我可以一步发布所有页面吗
- c - 两个指针位于同一个地址但指向不同的东西
- ios - 在封闭的文本视图中使用动态字体自动调整视图
- c# - 如何在回收站视图中实现片段事务
- javascript - 使用 PHP 中的 JavaScript 更改 HTML 属性
- amazon-web-services - 每天运行少于 24 小时时预留实例
- android - Urban Airship Android GCM 未在 Android Oreo 和 Pie 上收到推送通知
- node.js - 如何修改使用 TypeScript 构建的 npm 包
- kubernetes - 如何在内部 Kubernetes 集群上创建持久卷