运行 远程 SSH 服务器上的本地 PowerShell 脚本

Running local PowerShell script on remote SSH server

我想知道是否可以 运行 我通过 SSH 进入的远程服务器上的本地 PowerShell 脚本。这最好必须通过像 Paramiko 这样的脚本来完成,在那里我可以 运行 Paramiko Python 脚本,它会做所有的事情——SSH 和 运行 本地 PowerShell 脚本同时完成。

我找了一圈,好像没有什么定论。

我试过 Python Paramiko,它确实有效。但是,我所能做的就是通过 SSH 连接到远程服务器,然后使用 SFTP 将 PowerShell 脚本文件复制到 运行 脚本。是否可以完全不使用 SFTP? 我在哪里可以 运行 本地脚本而不发送它?

谢谢。

我试过的代码:

cmd4 = "powershell; echo './script.ps1' | powershell -File C:\Users\Desktop\script.ps1"
cmd5 = "C:\Users\Desktop\script.ps1"
stdin, stdout, stderr = ssh.exec_command(cmd4)
stdin.write(cmd5 + '\n')
stdin.flush()
time.sleep(5)

lines = stdout.readlines()
print (stdout.readlines())

我试过打印 stdout 但它是空的。

也试过这个:

cmd5 = "C:\Users\Desktop\script.ps1"
cmd6 = "powershell; echo './script.ps1;' | powershell -noprofile -noninteractive -command { $input | iex }"
stdin, stdout, stderr = ssh.exec_command(cmd6)
stdin.write(cmd5 + '\n')
stdin.flush()
time.sleep(5)

lines = stdout.readlines()
print (stdout.readlines())

运行 powershell 在服务器上并将脚本提供给它的输入。

只需将这两个结合起来:

  • How to evaluate PowerShell script inputed from stdin

一个简单的(未经测试的)例子:

with open("C:\Users\Desktop\script.ps1", "r") as f:
    script = f.read() + "\n"

cmd = "powershell -noprofile -noninteractive -"
stdin, stdout, stderr = ssh.exec_command(cmd)
stdout.channel.set_combine_stderr(True)
stdin.write(script)
stdin.flush()
stdin.close()

lines = stdout.readlines()
print(lines)