wmi.x_access_denied:<x_wmi:运行我的python脚本时发生意外的COM错误

时间:2020-04-04 14:40:54

标签: python windows wmi access-denied wmi-query

我有一个python脚本,可提取网络中所有Windows工作站的硬件信息(可以说是客户端计算机)

目的:提取网络上所有Windows计算机的硬件信息。

我的设置:

  • python版本-3.7x(32位)
  • 使用wmi库获取硬件信息,例如序列号,系统名称。
  • 客户端计算机-300+,位于同一域和同一网络(192.168.21.0-192.168.21.200)下。

我面临的问题:如果通过运行脚本来传递带有本地管理员凭据的远程IP地址,那么wmi库实际上是如何工作的。

错误:

Traceback (most recent call last):
  File "C:\Python3\lib\site-packages\wmi.py", line 1263, in connect       
    authentication_level=authentication_level
  File "C:\Python3\lib\site-packages\wmi.py", line 1397, in connect_server
    named_value_set
  File "<COMObject WbemScripting.SWbemLocator>", line 5, in ConnectServer 
  File "C:\Python3\lib\site-packages\win32com\client\dynamic.py", line 287, in _ApplyTypes_
    result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'SWbemLocator', 'Access is denied. ', None, 0, -2147024891), None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "j:/Projects/pythonProjects/networkassesttracker/matserbuild.py", line 3, in <module>
    con = wmi.WMI("192.168.225.117",user=r'admin',password='admin01')   #FILL WITH THE REMOTE MACHINE NAME
  File "C:\Python3\lib\site-packages\wmi.py", line 1290, in connect
    handle_com_error ()
  File "C:\Python3\lib\site-packages\wmi.py", line 241, in handle_com_error
    raise klass (com_error=err)
wmi.x_access_denied: <x_wmi: Unexpected COM Error (-2147352567, 'Exception occurred.', (0, 'SWbemLocator', 'Access is denied. ', None, 0, -2147024891), None)>

可以通过在每台客户端计算机上启用/更改这些设置来克服此wmi.x_access_denied, 出于测试目的,我检查了一下并奏效,仅供参考,此解决方案由该博客提供 WMI "access denied" error for remote computer

  1. 从WMI Control-> CIMV2

  2. 为WMI用户启用了远程访问
  3. 通过防火墙启用了远程WMI:netsh firewall set service RemoteAdmin enable

  4. 为WMI用户更改了dcomcnfg中的DCOM配置,方法是授予该帐户“远程激活”权限

我有200多个客户端,因此我无法为我拥有的每个节点手动启用或更改这些设置。

有没有可能的解决方案,例如创建具有wmi访问权限的任何域用户或为所有域计算机编写任何组策略?

我的主要目标:要提取硬件信息,例如工作站序列号,工作站名称,GPU名称,监视驻留在同一网络中的远程计算机(Windows 7和10)的序列号。

0 个答案:

没有答案