Python WMI模块获取远程主机root\wmi类属性值的问题
解决Python WMI访问远程root\wmi下WmiMonitorBasicDisplayParams属性的问题
1. 本地获取实际属性值的正确方式
你之前的代码拿到的是WMI类定义,而非实际设备的实例数据。要获取每台显示器的具体属性值,需要先获取类的实例:
import wmi # 连接到root\wmi命名空间 c = wmi.WMI(namespace="root/wmi") # 获取WmiMonitorBasicDisplayParams的所有实例(对应每台已连接显示器) monitor_instances = c.WmiMonitorBasicDisplayParams() # 遍历实例提取目标属性 for monitor in monitor_instances: # 过滤出处于活动状态的显示器 if monitor.Active: print(f"显示器实例名: {monitor.InstanceName}") print(f"最大水平尺寸: {monitor.MaxHorizontalImageSize}") print(f"最大垂直尺寸: {monitor.MaxVerticalImageSize}") print("---")
2. 远程计算机的访问方式
要访问远程计算机的root\wmi命名空间,只需在初始化WMI时指定远程主机信息,按需传入权限凭证即可:
import wmi # 远程计算机配置 remote_host = "远程计算机名或IP地址" username = "远程访问用户名" # 可选:当前用户无远程WMI权限时需提供 password = "远程访问密码" # 可选:配合用户名使用 # 连接到远程计算机的root\wmi命名空间 c = wmi.WMI(computer=remote_host, namespace="root/wmi", user=username, password=password) # 后续逻辑与本地一致 monitor_instances = c.WmiMonitorBasicDisplayParams() for monitor in monitor_instances: if monitor.Active: print(f"远程显示器实例名: {monitor.InstanceName}") print(f"最大水平尺寸: {monitor.MaxHorizontalImageSize}") print(f"最大垂直尺寸: {monitor.MaxVerticalImageSize}") print("---")
关键注意事项
- 远程计算机需开启WMI服务(Winmgmt)
- 防火墙需允许WMI通信(默认端口135及动态RPC端口,可配置固定端口简化设置)
- 执行脚本的用户需拥有远程计算机的WMI访问权限(通常为管理员权限)
- 使用域账号时,用户名格式为
"域\\用户名"
问题根源说明
你之前通过wmi.WMI(moniker="//./root/wmi:WmiMonitorBasicDisplayParams")获取的是类对象,仅包含属性的定义结构,不存储实际设备数据。必须通过获取类的实例,才能拿到每台显示器的具体数值。
内容的提问来源于stack exchange,提问作者Mattias
相关产品推荐
相关产品推荐

