2012-01-11 24 views

回答

1

这不是很好的代码 - 如果你对Windows API非常熟悉,我推荐使用win32con来做到这一点。但是,这是相当实用的:

import subprocess 

splitstring = "\\r\\n" 
bCompList = subprocess.check_output(['dsquery', 'computer', 'domainroot', 
            '-scope', 'subtree', '-limit', '0']) 
compList = str(bCompList)[2:-5].split(splitstring) 

subprocess模块用于运行外部命令;我建议reading up on the documentationsubprocess.check_output捕捉并返回stdout命令的输出。 (请注意,该命令的列表。这一点很重要!)

在这种情况下,我们使用dsquery computer查询所有计算机对象('limit', '0')整个域('domainroot')。这会返回一个二进制字符串 - 存储在bCompList

由于它是一个二进制字符串,我们可能会想将其转换为“标准”字符串格式来处理 - 这就是为什么我们使用str()。我们可以用切片剪掉了“垃圾”字符(“b”这表明该字符串是二进制,并且后'\\r\\n'垃圾。)那得到的线,然后获取使用split()打破它成一个列表。

顺便说一句,如果你想剪掉引号每个计算机对象dsquery computer地方,切片更改为[3:-6],改变splitstring = "\\r\\n"splitstring = "\"\\r\\n\""

有两个显著警告这段代码,但是:

  • 必须安装功能Windows的“AD DS管理单元和命令行工具”的计算机上运行(至少,这是要记录什么,他们是所谓的Windows Server 2008 R2。)
  • 您需要具有适当权限的AD用户。 (另外,你可以在命令中包括参数列表'-u', username, '-p', password,更换usernamepassword与相应的凭据。)
相关问题