加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python WMI调用不能在Windows 7下运行

发布时间:2020-12-20 13:22:11 所属栏目:Python 来源:网络整理
导读:我在 Windows 7下使用 Python中的WMI(通过win32com)遇到了一个棘手的问题.我无法找到解决方案. 这是我的代码: from win32com.client import GetObjectdef get_printers(computer): """ Get a list of printers from the specified computer name. """ wmise
我在 Windows 7下使用 Python中的WMI(通过win32com)遇到了一个棘手的问题.我无法找到解决方案.

这是我的代码:

from win32com.client import GetObject

def get_printers(computer):
    """ Get a list of printers from the specified computer name. """
    wmiservice = GetObject(r"winmgmts:{impersonationLevel=impersonate}!" + computer + r"rootcimv2")
    return wmiservice.ExecQuery("Select * from Win32_Printer")

for printer in get_printers("ps2"):
    print printer.Name

这在Windows XP下运行良好.但是如果我在Windows 7下运行它会失败:

Traceback (most recent call last):
  File "C:Python27Libsite-packagesPythonwinpywinframeworkscriptutils.py",line 325,in RunScript
    exec codeObject in __main__.__dict__
  File "C:Python27sampletemp2.py",line 8,in <module>
    for printer in get_printers("ps2"):
  File "C:Python27sampletemp2.py",line 5,in get_printers
    wmiservice = GetObject(r"winmgmts:{impersonationLevel=impersonate}!" + computer + r"rootcimv2")
  File "C:Python27libsite-packageswin32comclient__init__.py",line 72,in GetObject
    return Moniker(Pathname,clsctx)
  File "C:Python27libsite-packageswin32comclient__init__.py",line 87,in Moniker
    moniker,i,bindCtx = pythoncom.MkParseDisplayName(Pathname)
com_error: (-2147024891,'Access is denied.',None,None)

我在Win 7中尝试了所有我能想到的:禁用防火墙(无病毒扫描程序),确保启用DCOM,确保启用WMI以及禁用UAC.任何帮助都会受到高度赞赏.

注意:我在Windows 7 Ultimate x86(和Windows XP SP3)下使用Python 2.7.1和pywin32 build 215.

解决方法

事实证明,问题与DCOM / WMI / UAC /防火墙无关.令人惊讶的是,当这些故障发生时,Win 7 PC在其事件日志中根本没有报告.

我注意到的是,在最初的问题中,来自Win 7的传出连接报告了拒绝访问.但我也注意到,传入Win 7 PC的连接(与上面相同的python脚本)报告RPC服务器不可用.其他PC(不是Win 7)PC也会在事件日志中报告kerberos错误(ID 4).

问题是,我们的域名中有活动目录,特别是Win 7 PC.由于某种原因,活动目录错误地认为有多个具有此名称的PC – 这是kerberos事件日志的来源.

有效的修复方法是:将Win 7 PC从域中取出,将PC更改为新名称,然后将PC重新放回域中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读