Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法

在日常工作中,我们可能需要在多台 Windows 主机上进行一些操作,如安装软件、修改配置等 。如果手动在每台机器上操作,不仅费时费力,还容易出错 。因此,我们可以使用 Python 的 pywinrm 模块来远程控制 Windows 主机,实现自动化操作 。
pywinrm 是一个 Python 模块,用于通过 Windows 远程管理协议(WinRM)与 Windows 主机进行交互 。借助 pywinrm,我们可以使用 Python 编写脚本,实现远程执行命令、上传下载文件等操作 。

Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法

文章插图
下面,我们将从多个角度分析如何使用 pywinrm 远程控制 Windows 主机 。
环境准备
在使用 pywinrm 远程控制 Windows 主机之前,需要确保以下条件已满足:
1. Windows 主机已启用 WinRM 服务,并已设置允许的 IP 地址或域名 。
2. Python 已安装,并已安装 pywinrm 模块 。
3. 在 Python 脚本中,需要导入 pywinrm 模块 。
基本用法
连接 Windows 主机
使用 pywinrm 远程控制 Windows 主机的第一步是建立连接 。连接需要指定主机名、用户名和密码等信息 。以下是连接示例:
```python
import winrm
# 定义连接主机的信息
hostname = '192.168.1.2'
username = 'admin'
password = 'password'
# 建立连接
session = winrm.Session(hostname, auth=(username, password))
```
执行命令
建立连接后,我们可以使用 session.run_cmd() 方法执行命令 。该方法返回一个 tuple,包含命令的标准输出、标准错误和退出代码 。以下是执行命令示例:
```python
# 执行命令
command = 'ipconfig'
result = session.run_cmd(command)
# 输出结果
print(result.std_out.decode('gbk'))# 标准输出
print(result.std_err.decode('gbk'))# 标准错误
print(result.status_code)# 退出代码
```
执行 PowerShell 脚本
pywinrm 还支持执行 PowerShell 脚本 。我们可以使用 session.run_ps() 方法执行 PowerShell 脚本 。该方法返回一个 tuple,包含脚本的标准输出、标准错误和退出代码 。以下是执行 PowerShell 脚本示例:
```python
# 执行 PowerShell 脚本
script = 'Get-Process | Select-Object -Property Name, Id, CPU | Sort-Object -Property CPU -Descending | Select-Object -First 5'
result = session.run_ps(script)
# 输出结果
print(result.std_out.decode('gbk'))# 标准输出
print(result.std_err.decode('gbk'))# 标准错误
print(result.status_code)# 退出代码
```
上传下载文件
pywinrm 还支持上传下载文件 。我们可以使用 session.copy_file() 方法上传和下载文件 。以下是上传下载文件示例:
```python
【Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法】# 上传文件
local_path = 'test.txt'
remote_path = 'C:\\test.txt'
session.copy_file(local_path, remote_path)
# 下载文件
local_path = 'test.txt'
remote_path = 'C:\\test.txt'
session.copy_file(remote_path, local_path)
```
高级用法
使用 HTTPS
默认情况下,pywinrm 使用 HTTP 协议与 Windows 主机进行通信 。如果需要使用 HTTPS 协议,可以通过修改连接信息来实现 。以下是使用 HTTPS 的示例:
```python
import winrm
# 定义连接主机的信息
hostname = '192.168.1.2'
username = 'admin'
password = 'password'
# 定义 HTTPS 连接信息
session = winrm.Session(hostname, auth=(username, password), transport='ntlm', server_cert_validation='ignore')
```
使用证书认证
除了用户名和密码认证外,pywinrm 还支持使用证书认证 。在使用证书认证前,需要先为 Windows 主机配置证书 。以下是使用证书认证的示例:

推荐阅读