You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:40:27