【问题标题】:Get-ADuser : A referral was returned from the serverGet-ADuser : 从服务器返回了一个引用
【发布时间】:2019-01-20 18:02:28
【问题描述】:

运行脚本时出现以下错误:

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 文件。它在大多数情况下都有效,但它给某些用户一个错误。我认为这可能是因为该组中的那些用户属于不同的域。

【问题讨论】:

  • 我建议使用Elseif 而不是Else { If。使其格式更好一些。您可以将其放入Try Catch 块中以捕获错误并更轻松地查看消息。您还可以排除错误帐户并将其转储到新的 CSV 文件中以供进一步调查。

标签: powershell active-directory


【解决方案1】:

我认为您可以简单地从Get-ADUser 中删除-Server。由于Get-ADGroupMember 返回一个ADPrincipal[] 类型,每个用户都包含一个完全限定的DistinguishedName,这意味着结果来自的域(“服务器”)。

是的,您认为本质上是正确的(伪代码):

"contoso.com\user" | Get-ADUser -Server "DC01.theOtherContoso.com"

不会工作。从Get-ADGroupMember 进行管道传输时,您会收到错误消息:

Get-ADUser : 从服务器返回一个推荐

如果您运行相同的查询,但从 Get-ADUser 部分中省略了 -Server 部分,它将使用可分辨名称来确定从何处提取信息:

$GM = Get-ADGroupMember -Server $dom -Identity $G.name -Recursive | Get-ADUser -Properties *

它应该返回你需要的用户对象。

【讨论】:

  • 我收到以下错误:Get-ADGroupMember : Cannot find an object with identity: 'groupname' under: 'DC=mmroot,DC=org'. At line:22 char:8 + $GM = Get-ADGroupMember -Server $dom -Identity $G.name -Recursive |
【解决方案2】:

请参阅this question 中的答案。那里的答案表明您可以在异常中检索引用位置并针对其他服务器重试 Get-ADUser。

您可能会重新考虑如何搜索所有这些组和用户。用户在整个林中复制。全球和通用组也是如此。因此,您可以搜索全局目录,而不是遍历每个域中的一个 DC。 Get-DomainController -GlobalCatalog 并针对该服务器的全局编录端口运行 Get-AD* 命令,即 Get-ADUser -server $GCServerName:3268

但是,请记住,GC 不包含完整的用户和组属性,并且它确实返回的属性会受到复制延迟的影响。

这是否有用取决于您的域架构。在我自己的工作场所,查询远程域控制器非常昂贵。不过,我们的站点域控制器是一个全局目录,因此搜索森林信息的速度非常快。

【讨论】:

    猜你喜欢
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多