winrm启动GUI程序的方式

poi2023-03-14技术交流462

简答:winrm不支持gui,仅限运行cli程序。

想执行图形界面,可以通过winrm建一个计划任务,让计划任务调用目标程序。10秒后删除该计划任务,曲线救国。

以下为详情:

公司需要实现 远程控制工控机播放ppt。

同事写了一个程序,自动复制ppt至目标目录,然后全屏播放该ppt。

但是在使用pywinrm远程运行时,发现该程序复制ppt没问题,但是无法播放ppt?

研究了几天才发现,winrm不支持gui程序…真是太草了…

只支持命令行肯定无法满足需求,只好让其他方式调用目标程序。

试过各种脚本均失败。

于是想到创建个计划任务,执行完毕删掉不就完事了?

<pre class="prism-highlight prism-language-python">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,请在命令行输入<span style=”color: #FFFFFF; font-family: “Söhne Mono”, Monaco, “Andale Mono”, “Ubuntu Mono”, monospace; white-space: pre; background-color: #000000;”>pip install pywinrm</span>

还有一个前提,客户端主机需要设置一下winrm,否则会链接失败。

以下配置请在powershell中执行。

<pre class="prism-highlight prism-language-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