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重新放回域中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |