利用Python和WinRM远程管理Windows服务器

拾柒
拾柒
发布时间:2026-10-16| 8人浏览过
原创

本文详解如何使用Python通过WinRM协议远程管理Windows服务器。内容涵盖Windows端WinRM服务的启动、防火墙设置及客户端配置,以及控制端安装pywinrm依赖库。通过具体代码示例,演示如何建立连接并远程执行CMD命令或PowerShell脚本,实现日志查看与批处理文件运行,适用于企业闲置Windows机器的远程运维场景。

许多企业会将闲置的Windows机器用作临时服务器,在实际运维中,远程调用这些机器内的程序或查看日志文件是常见需求。

Windows系统内置的「winrm」服务能够有效满足此类远程管理需求。

WinRM是一种基于简单对象访问协议(SOAP)的防火墙友好型协议,旨在允许不同供应商的硬件和操作系统之间进行互操作。

关于WinRM的更多官方信息,可访问其官网地址查阅。

1. 被控端Windows配置

本文以Windows 10系统机器为例进行说明。

具体操作步骤如下:

启动winrm服务

请以管理员权限打开CMD命令窗口,并输入以下命令来启动winrm服务。

# 启动winrm服务
winrm quickconfig -q

若运行时报错并提示网络类型设置异常,请继续后续步骤进行调整。

此时可按下快捷键win+i进入“网络和Internet”设置,更改网络配置文件,将网络类型由“公用”切换为“专用”。

检查winrm服务监听状态

继续在命令行输入以下命令,以查看winrm服务的当前状态。

注意:请记录输出结果中的端口号Port值,后续连接时将用到该端口。

# 查看winrm服务的状态
winrm e winrm/config/listener

# 结果
Listener
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = **

查看winrm配置信息(可选)

通过以下命令可以分别查看winrm的全部配置信息、client客户端配置信息以及service服务端配置信息。

# 全部
winrm get winrm/config

# Client
winrm get winrm/config/client

# Service
winrm get winrm/config/service

配置winrm client

# 配置winrm client
winrm set winrm/config/client @{AllowUnencrypted="true"}</code>
<code>winrm set winrm/config/client @{TrustedHosts="*"}</code>
<code>winrm set winrm/config/client/auth @{Basic="true"}

配置winrm service

在完成winrm service和winrm client的配置后,建议通过步骤1-3中的命令检查配置文件,确保配置已生效。

# 配置winrm service
winrm set winrm/config/service @{AllowUnencrypted="true"}

winrm set winrm/config/service/auth @{Basic="true"}

2. 控制端环境准备

在控制端(如Mac OSX或Linux系统)上,只需安装「pywinrm」依赖包即可进行后续操作。

# 控制端安装依赖包
pip3 install pywinrm

3. 实战代码示例

完成上述准备工作后,即可编写Python代码对Windows被控端进行控制。

首先,需要获取目标Windows机器的IP地址、端口号、用户名及密码,以此建立连接。

# 连接windows
import winrm

...
# ip地址:端口号
# winrm server端口号
# auth:用户名和密码
self.session = winrm.Session("192.168.**.**:5985", auth=('username', 'password'), transport='ntlm')
...

连接成功后,即可利用对象的「run_cmd」和「run_ps」函数来模拟CMD或PowerShell的命令行输入。

此处以查看Windows某硬盘目录下的日志文件为例进行演示。

# 连接windows
import winrm
import codecs
...
 def exec_cmd(self, cmd):
        """
        执行cmd命令,获取返回值
        :param cmd:
        :return:
        """
        # CMD
        result = self.session.run_cmd(cmd)
        # powerShell
        # result = self.session.run_ps(cmd)
        # 返回码
        # code为0代表调用成功
        code = result.status_code

        # 根据返回码,获取响应内容(bytes)
        content = result.std_out if code == 0 else result.std_err

        # 转为字符串(尝试通过UTF8、GBK进行解码)
        # result = content.decode("utf8")
        # result = codecs.decode(content,'UTF-8')
        try:
            result = content.decode("utf8")
        except:
            result = content.decode("GBK")

        print(result)
        return result
...
# 打开文件D:/py/log/trade.log
# windows使用type命令,查看文件内容
result = self.exec_cmd('D: &cd py\\log &type trade.log')

# 查看结果
print(result)

4. 总结

除了远程查看Windows文件外,该方法还可用于执行bat批处理文件,或模拟命令行输入并根据返回值执行其他操作。

至此,关于Python远程控制Windows服务器的方法详解已介绍完毕,更多相关内容可搜索本站历史文章或继续浏览后续文章,感谢支持。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。