运行脚本时出现以下错误:
Get-ADUser : A referral was returned from the server At line:25 char:70
+ ... -Identity $G.name -Recursive | Get-ADUser -Server $dom -Properties *
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (CN=User...,DC=org:ADUser) [Get-ADUser], ADReferral Exception
+ FullyQualifiedErrorId : ActiveDirectoryServer:****,Microsoft.ActiveDirectory.Management.Commands.GetADUser
这是我的脚本:
$Domains = (Get-ADForest).Domains.ForEach{(Get-ADDomain $_).PDCEmulator}
$Users = @()
$Groups = @()
$list = Get-Content C:\temp\ADGroups.txt
ForEach ($dom in $Domains) {
Foreach ($o in $list) {
$ObjectClass = (Get-ADObject -server $dom -Filter {SamAccountName -eq $o}).ObjectClass
If ($ObjectClass -eq "User") {
$U = Get-ADUser -Properties * -Identity $o -Server $dom
$User = "" | Select FullUserName, LoginID, Description
$User.FullUserName = $U.DisplayName
$User.LoginID = $U.SamAccountName
$User.Description = $U.description
$Users += $User
} Else {
If ($ObjectClass -eq "Group") {
$G = Get-ADGroup -Properties * -Identity $o -Server $dom
$GM = Get-ADGroupMember -Server $dom -Identity $G.name -Recursive | Get-ADUser -Server $dom -Properties *
Foreach ($gmember in $GM) {
$Group = "" | Select GroupName, GroupDescription, GroupMemberName, GroupMemberLoginID, GroupMemberDesc
$Group.GroupName = $G.Name
$Group.GroupDescription = $G.Description
$Group.GroupMemberName = $gmember.Name
$Group.GroupMemberLoginID = $gmember.SamAccountName
$Group.GroupMemberDesc = $gmember.Description
$Groups += $Group
}
}
}
}
}
$Users | Export-Csv C:\temp\Users.csv -NoTypeInformation
$Groups | Export-Csv C:\temp\Groups.csv -NoTypeInformation
我的脚本的目的是提取属于组的用户并导出到.csv文件。它在大多数情况下都有效,但对于某些用户却给我一个错误。我认为可能是因为该组中的那些用户属于不同的域。
答案 0 :(得分:2)
请参阅this question中的答案。那里的答案表明您可以在异常中检索引用位置,然后对另一台服务器重试Get-ADUser。
您可能会重新考虑如何搜索所有这些组和用户。在整个林中复制用户。全球和通用团体也是如此。因此,您可以搜索全局目录,而不是遍历每个域中的一个DC。 Get-DomainController -GlobalCatalog
并在该服务器的全局编录端口(即Get-ADUser -server $GCServerName:3268
但是,请记住,GC不包含完整的用户和组属性,并且 返回的属性会受到复制延迟的影响。
这是否有用取决于您的域体系结构。在我自己的工作场所中,查询远程域控制器非常昂贵。不过,我们的站点域控制器是全局目录,因此在其中搜索林信息非常快。
答案 1 :(得分:1)
我认为您可以简单地将-Server
从Get-ADUser
中删除。由于Get-ADGroupMember
返回的是ADPrincipal[]
类型,因此每个用户都包含一个完全合格的DistinguishedName
,这表示结果所来自的域(“服务器”)。
是的,您实际上认为(伪代码)是正确的:
"contoso.com\user" | Get-ADUser -Server "DC01.theOtherContoso.com"
将无法正常工作。并且从Get-ADGroupMember
进行管道传输时,会出现错误:
Get-ADUser:从服务器返回了引荐
如果您运行相同的查询,但是从-Server
部分省略了Get-ADUser
部分,它将使用可分辨的名称来确定将信息提取到何处:
$GM = Get-ADGroupMember -Server $dom -Identity $G.name -Recursive | Get-ADUser -Properties *
它将返回您所需的用户对象。