如何用Python获取网络上计算机的本地管理员?

0 投票
2 回答
1885 浏览
提问于 2025-04-15 17:55

我需要获取公司里所有在自己电脑上拥有本地管理员权限的人的名单。每台机器上都有一个叫“Administrators”的组。我可以通过以下命令从活动目录获取所有电脑的列表:

import active_directory

for computer in active_directory.search ("objectCategory='Computer'"):
  print computer.displayName

我想我需要把每台电脑的名字拿出来,然后再用这个名字去查找。我在想,也许可以读取每台电脑的远程注册表,查找SID——据说SID 'S-1-5-domain-500' 可以给我提供这台电脑上本地管理员的名单。我做了:

import _winreg
COMPUTER_NAME = "FakeComputerName"
KEY_PATH = r"System\CurrentControlSet\Control\ComputerName\ComputerName"
HKLM_remote = _winreg.ConnectRegistry (r"\\%s" % COMPUTER_NAME, _winreg.HKEY_LOCAL_MACHINE)
hKeyRemote = _winreg.OpenKey (HKLM_remote, KEY_PATH, 0, _winreg.KEY_READ)
value, type = _winreg.QueryValueEx (hKeyRemote, "ComputerName")
print "Remote computer name is", value
Remote computer name is FakeComputerName

我该怎么把这些结合起来,才能得到我想要的结果?这些能一起工作吗?这样做是最好的方法吗?一旦我能让它工作,我就可以想办法把结果写入文件,并添加一些例外,比如如果电脑不在网络上,就记录下来,然后继续下一个电脑。也许可以用win32security?

我不知道该用哪个注册表键,甚至不知道这是否有效。我今天在这上面花了大约5个小时,我还在学习Python。我不懂VB,而网上大部分的代码都是用VB写的。

2 个回答

0

我不太清楚具体细节,但听起来你可能想看看这个WMI包。

我之前在玩COM和Windows注册表的时候遇到过它。看起来自那以后它有了一些改进。

这是Windows的参考文档。WMI参考

0

这个操作得到的数据之后会被处理吗?如果这是一个人工查看的手动扫描,那你就想太多了。

直接用网络扫描工具来帮你搞定,比如这个

撰写回答