使用 Python 和 WMI 查询获取 运行 服务列表
Using Python and WMI Queries to get a list of running services
我正在尝试获取 windows 机器上 运行 的服务列表 python。
我的代码:
import wmi
c = wmi.WMI()
wql = "SELECT * FROM Win32_Service WHERE State = ""Running"""
for x in c.query(wql):
print(x)
我收到一个错误,我不明白为什么。我的脚本中还有其他一些 wql 语句,它们似乎工作正常。
错误:
Traceback (most recent call last):
File "C:/Users/i861470/Desktop/Scripts/test.py", line 79, in <module>
for x in c.query(wql):
File "C:\Users\i861470\Desktop\Scripts\venv\lib\site-packages\wmi.py", line 1009, in query
return [ _wmi_object (obj, instance_of, fields) for obj in self._raw_query(wql) ]
File "C:\Users\i861470\Desktop\Scripts\venv\lib\site-packages\wmi.py", line 1009, in <listcomp>
return [ _wmi_object (obj, instance_of, fields) for obj in self._raw_query(wql) ]
File "C:\Users\i861470\Desktop\Scripts\venv\lib\site- packages\win32\com\client\dynamic.py", line 280, in __getitem__
return self._get_good_object_(self._enum_.__getitem__(index))
File "C:\Users\i861470\Desktop\Scripts\venv\lib\site-packages\win32\com\client\util.py", line 41, in __getitem__
return self.__GetIndex(index)
File "C:\Users\i861470\Desktop\Scripts\venv\lib\site-packages\win32\com\client\util.py", line 62, in __GetIndex
result = self._oleobj_.Next(1)
win32.types.com_error: (-2147217385, 'OLE error 0x80041017', None, None)
wql = "SELECT * FROM Win32_Service WHERE State = ""Running"""
导致无效的 WQL 查询(使用 print(wql)
检查)
SELECT * FROM Win32_Service WHERE State = Running
你需要
wql = 'SELECT * FROM Win32_Service WHERE State = "Running"'
这会导致有效的 WQL 查询(阅读 WHERE
Clause 文档)
SELECT * FROM Win32_Service WHERE State = "Running"
顺便说一句,您可以在 WHERE
子句中使用字符串文字,例如 "Running"
或 'Running'
。因此,以下 WQL 查询也有效:
wql = "SELECT * FROM Win32_Service WHERE State = 'Running'"
我正在尝试获取 windows 机器上 运行 的服务列表 python。
我的代码:
import wmi
c = wmi.WMI()
wql = "SELECT * FROM Win32_Service WHERE State = ""Running"""
for x in c.query(wql):
print(x)
我收到一个错误,我不明白为什么。我的脚本中还有其他一些 wql 语句,它们似乎工作正常。
错误:
Traceback (most recent call last):
File "C:/Users/i861470/Desktop/Scripts/test.py", line 79, in <module>
for x in c.query(wql):
File "C:\Users\i861470\Desktop\Scripts\venv\lib\site-packages\wmi.py", line 1009, in query
return [ _wmi_object (obj, instance_of, fields) for obj in self._raw_query(wql) ]
File "C:\Users\i861470\Desktop\Scripts\venv\lib\site-packages\wmi.py", line 1009, in <listcomp>
return [ _wmi_object (obj, instance_of, fields) for obj in self._raw_query(wql) ]
File "C:\Users\i861470\Desktop\Scripts\venv\lib\site- packages\win32\com\client\dynamic.py", line 280, in __getitem__
return self._get_good_object_(self._enum_.__getitem__(index))
File "C:\Users\i861470\Desktop\Scripts\venv\lib\site-packages\win32\com\client\util.py", line 41, in __getitem__
return self.__GetIndex(index)
File "C:\Users\i861470\Desktop\Scripts\venv\lib\site-packages\win32\com\client\util.py", line 62, in __GetIndex
result = self._oleobj_.Next(1)
win32.types.com_error: (-2147217385, 'OLE error 0x80041017', None, None)
wql = "SELECT * FROM Win32_Service WHERE State = ""Running"""
导致无效的 WQL 查询(使用 print(wql)
检查)
SELECT * FROM Win32_Service WHERE State = Running
你需要
wql = 'SELECT * FROM Win32_Service WHERE State = "Running"'
这会导致有效的 WQL 查询(阅读 WHERE
Clause 文档)
SELECT * FROM Win32_Service WHERE State = "Running"
顺便说一句,您可以在 WHERE
子句中使用字符串文字,例如 "Running"
或 'Running'
。因此,以下 WQL 查询也有效:
wql = "SELECT * FROM Win32_Service WHERE State = 'Running'"