我有一个 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