【发布时间】:2012-01-11 17:10:39
【问题描述】:
如何在 AD 中搜索所有计算机名称?
【问题讨论】:
-
您也可以尝试在 serverfault.com 上发布您的问题,这是为 sa 和桌面支持人员提供的。
标签: python windows active-directory
如何在 AD 中搜索所有计算机名称?
【问题讨论】:
标签: python windows active-directory
我想你可以在Active Directory Cookbook Python stuff找到你要找的东西。
【讨论】:
这不是很好的代码——如果您对 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 documentation。 subprocess.check_output 捕获并从标准输出返回命令的输出。 (注意命令是一个列表。这很重要!)
在这种情况下,我们使用 dsquery computer 来查询整个域 ('domainroot') 中的所有计算机对象 ('limit', '0')。这将返回一个二进制字符串——存储在 bCompList 中。
由于它是二进制字符串,我们可能希望将其转换为“标准”字符串格式以使用——这就是我们使用str() 的原因。我们可以使用切片来修剪“垃圾”字符(“b”表示字符串是二进制的,而尾随的'\\r\\n' 垃圾。)然后生成的字符串被split() 使用以将其分解为一个列表。
顺便说一句,如果您想剪掉每个计算机对象周围的引号dsquery computer,请将切片更改为[3:-6],并将splitstring = "\\r\\n" 更改为splitstring = "\"\\r\\n\""。
但是,此代码有两个重要的警告:
'-u', username, '-p', password,将username 和password 替换为适当的凭据。)【讨论】: