在这里我们可以看到例子: https://github.com/diyan/pywinrm 如何通过pywinrm和powershell脚本控制窗口 它的工作。
但是以防万一
ps_script = """$strComputer = $Host
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Python27\Scripts", [EnvironmentVariableTarget]::Machine)
Restart-Computer
"""
它将python添加到PATH,但不要重新启动Windows。
以防
ps_script = """Write-Host "hello"
"""
我看到"你好"在我的机器的终端,而不是远程。
出了什么问题?
答案 0 :(得分:0)
pywinrm的工作方式是:
winrs
命令的方式连接到WinRM powershell.exe -encodedCommand
可接受的格式(请参阅pywinrm code中调用PowerShell的行)print
,或做任何你需要的事情不确定您对Write-Host
的期望是什么 - 它只是一个cmdlet写入托管PowerShell的应用程序(如果是pywinrm
- 那将是PowerShell.exe
)并且主机是负责处理它 - 在你的情况下,把它写到std_out
。因此,我猜它到达你的控制台并不奇怪。
关于Restart-Computer - 当有活跃用户时,它往往会出错。该消息将以std_err
的pywinrm代码结束 - 您可能希望分析return_code
并根据值进行响应:
session = Session(...)
result = session.run_ps(command)
print result.std_out
if result.status_code != 0:
print "Error: %s" % result.std_err
我怀疑你没有对std_err
做任何事情,所以PowerShell向你投掷的任何错误都保持沉默。