用于检索特定计算机对象并显示其各自 OU 的脚本

用于检索特定计算机对象并显示其各自 OU 的脚本

我有一个 OU,它有许多子 OU,每个 OU 都有一个计算机 OU。要启动的最高级别 OU 是“部门”,它有许多子 OU。

我需要一个脚本来检索所有计算机并将它们列在一个表中,并显示它们各自的 OU。

脚本的结果可能看起来像这样:

计算机名称 --- OU

计算机01 ---- Fabrikam.com/部门/财务/计算机

....或者它甚至可能看起来像是相应的 AD“对象”:

Fabrikam.com/部门/财务/计算机/Computer01

尽管我更喜欢第一个。

这是我尝试过的脚本,但是运行它时会出现大量错误:

On Error Resume Next

Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")

Set objCommand = CreateObject("ADODB.Command")

objConnection.Provider = "ADsDSOObject"

objConnection.Open "Active Directory Provider"

Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000

objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

objCommand.CommandText = _
    "SELECT ADsPath FROM 'LDAP://OU=Departments,dc=fabrikam,dc=com' WHERE " & _
        "objectCategory='organizationalUnit'"  

Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

Do Until objRecordSet.EOF
    Set objOU = GetObject(objRecordSet.Fields("ADsPath").Value)
    Wscript.Echo objOU.distinguishedName

    objOU.Filter = Array("Computer")

    For Each objItem in objOU
        Wscript.Echo "  " & objItem.CN
    Next

    Wscript.Echo
    Wscript.Echo
    objRecordSet.MoveNext
Loop

如何检索 OU 中的所有计算机并将它们列在包含各自 OU 的表中?这似乎很简单,但我找不到任何可用的脚本。谢谢!

答案1

您的代码是 vbScript,但这在 powershell 中更容易实现,而且您确实在 powershell 论坛中发帖。

这将提供您所需的内容。有时我更喜欢使用 canonicalname 而不是 DistinguishedName。

这将需要安装 RSAT,或从域控制器运行。

import-module ActiveDirectory
get-adcomputer -Filter 'Name -like "*"' -SearchBase "OU=starthere,DC=yourdom,DC=com" | select DistinguishedName
get-adcomputer -Filter 'Name -like "*"' -SearchBase "OU=starthere,DC=yourdom,DC=com" -prop canonicalname | select canonicalname

相关内容