winrm启动GUI程序的方式
简答:winrm不支持gui,仅限运行cli程序。
想执行图形界面,可以通过winrm建一个计划任务,让计划任务调用目标程序。10秒后删除该计划任务,曲线救国。
以下为详情:
公司需要实现 远程控制工控机播放ppt。
同事写了一个程序,自动复制ppt至目标目录,然后全屏播放该ppt。
但是在使用pywinrm远程运行时,发现该程序复制ppt没问题,但是无法播放ppt?
研究了几天才发现,winrm不支持gui程序...真是太草了...
只支持命令行肯定无法满足需求,只好让其他方式调用目标程序。
试过各种脚本均失败。
于是想到创建个计划任务,执行完毕删掉不就完事了?
import winrm import time # 设置远程计算机的 IP 地址、用户名和密码 ip = '192.168.1.111' username = 'administrator' password = 'pswd' # 创建一个winrm.Session对象 session = winrm.Session(ip, auth=(username, password)) # 定义PowerShell命令,创建计划任务并立即执行 command = ''' $taskName = "MyTask" $action = New-ScheduledTaskAction -Execute "d:\\exe\\computer.exe" $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) $task = New-ScheduledTask -Action $action -Trigger $trigger Register-ScheduledTask -TaskName $taskName -InputObject $task Start-ScheduledTask -TaskName $taskName ''' # 执行PowerShell命令 result = session.run_ps(command) # 等待1分钟 time.sleep(60) # 删除计划任务 command = 'Unregister-ScheduledTask -TaskName "MyTask" -Confirm:$false' result = session.run_ps(command)
以上是python 3代码。*需要安装pywinrm,请在命令行输入pip install pywinrm
还有一个前提,客户端主机需要设置一下winrm,否则会链接失败。
以下配置请在powershell中执行。
1 查看winRM服务状态,默认都是未启动状态 winrm e winrm/config/listener 2 winRM服务启动 winrm quickconfig 3 为winrm service 配置auth winrm set winrm/config/service/auth '@{Basic="true"}' 4 为winrm service 配置加密方式为允许非加密(这个不配置,远程连接会出错) winrm set winrm/config/service '@{AllowUnencrypted="true"}' 5 查看winrm配置 winrm get winrm/config