在Python中通过WMI获取IIS工作进程

0 投票
1 回答
667 浏览
提问于 2025-05-01 18:28

我正在尝试在Python中显示IIS的进程ID和池名称。这里是我的Python代码:

import wmi
c = wmi.WMI('.', namespace="root/WebAdministration")
c.query("select ProcessId from WorkerProcess")

但是它失败了:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\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:\Python27\lib\site-packages\win32com\client\util.py", line 84, in next
    return _get_good_object_(self._iter_.next(), resultCLSID = self.resultCLSID)
pywintypes.com_error: (-2147217389, 'OLE error 0x80041013', None, None)

我还尝试了:

for p in c.WorkerProcess:
    print p.ProcessId

但也没有成功。现在这里有一个非常相似的Visual Basic脚本代码,它运行得很好:

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")
Set processes = oWebAdmin.InstancesOf("WorkerProcess")

For Each w In processes
  WScript.Echo w.ProcessId
  WScript.Echo w.AppPoolName
Next

相关文档是:

http://msdn.microsoft.com/en-us/library/microsoft.web.administration.workerprocess(v=vs.90).aspx

看起来我应该要实例化一些东西,但我不知道该怎么做。有没有什么想法可以让我在Python中实现它?

暂无标签

1 个回答

0

其实我的代码是对的。我只是需要用管理员权限来运行它。

撰写回答