有没有办法从 RHEL 连接到远程 Windows 服务器并执行执行 GUI 自动化的 python 程序

Is there any way connect to a remote windows server from RHEL and execute a python program that does GUI automation

提问人:HariReddy Konatham 提问时间:9/20/2022 最后编辑:HariReddy Konatham 更新时间:9/20/2022 访问量:185

问:

我们在 RHEL 7.9 上托管了 Jenkins 服务器。我们想从 RHEL 盒子连接到远程 Windows 服务器,并执行一个使用 pywinauto 包的 python 程序来操作在远程 Windows 服务器上运行的 GUI 应用程序以进行功能测试。我们使用 pywinauto 的 python 脚本已准备就绪,并且在从远程 Windows 服务器上的 cmdline 执行时工作正常,并希望从 Jenkins 作业触发脚本。现在,这里有人可以告诉我应该考虑从 RHEL 连接到远程 Windows 服务器并执行执行 GUI 自动化的 python 脚本的选项吗?

python Jenkins pywinauto 远程执行

评论

0赞 JNevill 9/20/2022
这个类似问题的答案中有很多选择。我幼稚的想法是通过 SSH 连接到 Windows 机器并执行 python 脚本。您只需要在 Windows 机器上运行一个 SSH 服务器。但看起来还有其他选择。
0赞 HariReddy Konatham 9/20/2022
感谢您的回复!我认为如果我通过 SSH 连接到 Windows 服务器,我无法执行对 Windows 服务器上运行的应用程序执行 GUI 自动化的 python 脚本,因为我没有 Windows GUI 会话,这不对吗?
0赞 Vasily Ryabov 9/20/2022
@JNevill SSH 不提供活动桌面,因此无法访问 GUI。只有与 RDP 相关的解决方案是相关的。

答:

1赞 Dev 9/20/2022 #1

Holla,我最近从 centOS 8 完成了这个,虽然这是相当具有挑战性的。由于 pywinauto 需要活动桌面才能在 UI 上执行操作。为此,我们不能做SSH或类似的方式。

以下是如何...一步一步来。

  1. 您可以使用 RHEL 中的 xFreeRDP 与 Windows 服务器进行 RDP 连接。

    xfreerdp /u:username /p:password /v:hostname

参考 - FreeRDP

到目前为止,一切顺利,您无法在 RDP 会话上执行命令来触发执行。

  1. 但 Windows Server 是您的救星。它确实为您提供了 EVENTCREATE 命令,允许您创建事件。它将代表您在 Windows 服务器中创建事件。此命令将允许您灵活地安排作业。此命令创建的事件将列在 windows 的事件查看器实用程序中。要查看您创建的窗口事件,请提供有意义的消息。若要创建事件,用户应为管理员
    -

    eventcreate /t INFORMATION /id 1000 /d "Create event in WinMgmt source"

  2. 在此步骤中,您必须根据 Windows 上发生的事件设置/计划作业。通过右键单击事件,然后选择选项“将任务附加到此事件...”或直接进入 Task Schedular(另一个 Windows 实用工具)。

    a. 打开任务调度。
    湾。右键单击根树节点 - “Task Schedular Library”
    c.选择选项“创建任务...”
    d.将打开弹出窗口以创建任务填写名称和任务描述。
    e.选中“以最高权限运行”复选框。
    六.转到触发器选项卡和新建按钮。
    克。将“开始任务”的第一个下拉值选择为“在事件上”。
    我。在弹出窗口的设置部分,选择事件的日志类型。
    ii. 源和事件 ID 值应与您将在自定义事件(步骤 2 事件)中使用的值相似。
    iii. 根据需要选择其他日程安排设置。
    我。转到“操作”选项卡,然后单击“新建”按钮。
    j.在“新建操作”弹出窗口中,选择“操作”作为“启动程序
    k。选择要执行的程序(python脚本)和设置部分中的参数(如果有)。
    l.单击“确定”,然后通过从 cmd 触发事件来测试事件和任务的此连接(步骤 2)

  3. 除了一个关键部分外,现在几乎已经完成了。这就是如何从 RHEL 触发 eventcreate 命令。您可以通过使用 SSH 或 paramiko 包编写小型 python 代码来做到这一点。

注意的

  1. 使用 XfreeRDP 可以打开多个 RDP 终端。
  2. 多个 xfreeRDP 窗口将毫不费力地并行执行脚本。

评论

0赞 HariReddy Konatham 9/29/2022
感谢您的回复。从 RHEL 触发脚本但不能从 Jenkins 作业触发脚本(Jenkins 服务器托管在 RHEL 上)可以正常工作。我需要从 Jenkins 作业触发脚本。Jenkins 中是否有插件可以启用 GUI 终端并使用 Xfreerdp 连接到 Windows 服务器?