我正在尝试从其他域获取所有计算机帐户
这是我的Poweshell代码: $ environment =“myDomain”
$strCategory = "computer" $objDomain = New-Object
System.DirectoryServices.DirectoryEntry("LDAP://dc=" + $environment + ",dc=com")
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher ("LDAP://dc=" + $environment + ",dc=com")
$objSearcher.SearchRoot = $objDomain
$objSearcher.Filter = ("(objectCategory=$strCategory)")
$colProplist = "name"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)| Out-Null}
$colResults = $objSearcher.FindAll()
foreach ($objResult in $colResults) {
$objComputer = $objResult.Properties
Write-output $objComputer.name
}
我收到此错误: 使用“0”参数调用“FindAll”的异常:“从服务器返回了一个引用。
由于
答案 0 :(得分:4)
我遇到了类似的问题 - 我发现如果我指定了一个GC的服务器和我能够成功的端口。我使用的是PowerShell Get-AdUser cmdlet,但我的方案类似(尝试从子域查询通用组成员身份)。
get-aduser -server fqdn.gc.root.domain:3268
答案 1 :(得分:3)
你可以试试这个:
$dn = New-Object System.DirectoryServices.DirectoryEntry ("LDAP://DCIpAddress:389/dc=dom,dc=fr","administrator@dom.fr","admin")
# Here look for a user
$Rech = new-object System.DirectoryServices.DirectorySearcher($dn)
$Rech.filter = "((userPrincipalName=phocquet@dom.fr))"
$Rech.SearchScope = "subtree"
$Rech.PropertiesToLoad.Add("distinguishedName");
$Rech.PropertiesToLoad.Add("sAMAccountName");
$Rech.PropertiesToLoad.Add("lastLogon");
$Rech.PropertiesToLoad.Add("telephoneNumber");
$Rech.PropertiesToLoad.Add("memberOf");
$Rech.PropertiesToLoad.Add("distinguishedname");
$Rech.PropertiesToLoad.Add("otherHomePhone"); # téléphone domicile autre
$liste = $Rech.FindAll()
它与您的代码相同,但在这里我定位一个DC(您最好以域名DNS为目标)并对我的connnexion进行身份验证。如果其他域位于同一林中,则可以使用企业管理员帐户,如果其他域位于另一个林中,或者位于受信任域中,请使用域管理员。
答案 2 :(得分:1)
非常像atguilmette's answer这个问题,通过指定-Server
,我能够让Active Directory Cmdlets针对与当前域不同的域进行操作参数。 (与那个答案不同,我不需要明确地针对具有特定端口的GC机器。也许我的环境很特别......)
Get-ADGroup the-group-in-the-other-domain -Server other.domain.com
答案 3 :(得分:0)
Quest的AD cmdlet提供专门用于连接到另一个域的命令:Connect-QADService。
我在生产中成功地使用了它。