【问题标题】:Is it possible to return all computers in AD in python是否可以在 python 中返回 AD 中的所有计算机
【发布时间】:2012-01-11 17:10:39
【问题描述】:

如何在 AD 中搜索所有计算机名称?

【问题讨论】:

  • 您也可以尝试在 serverfault.com 上发布您的问题,这是为 sa 和桌面支持人员提供的。

标签: python windows active-directory


【解决方案1】:

我想你可以在Active Directory Cookbook Python stuff找到你要找的东西。

【讨论】:

    【解决方案2】:

    这不是很好的代码——如果您对 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 捕获并从标准输出返回命令的输出。 (注意命令是一个列表。这很重要!)

    在这种情况下,我们使用 dsquery computer 来查询整个域 ('domainroot') 中的所有计算机对象 ('limit', '0')。这将返回一个二进制字符串——存储在 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 替换为适当的凭据。)

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多