Set-AdUser 从服务器返回了推荐

Set-AdUser a referral was returned from the server

我正在尝试通过 CSV 为用户设置新的公司值。

我了解到您在我的 Set-AdUser 命令中未设置服务器时遇到错误。

At line:18 char:18
+ ...    $query | Set-ADUser -Server tstdc01 -Company "New Company"
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (CN=testUser\, H...DC=domain,DC=local:ADUser) [Set-ADUser], ADReferralException
    + FullyQualifiedErrorId : ActiveDirectoryServer:8235,Microsoft.ActiveDirectory.Management.Commands.SetADUser

--------------------------------------------------------------------------------------------------------

Import-Module ActiveDirectory
$users = Import-Csv -Path "pathToCsv.csv" -Encoding UTF8 -Delimiter ";"
$setUsers = @()
$domain = "domain.local:3268"
foreach ($user in $users) {
    $samAccountName = $user.samAccountName
    $query = Get-ADUser -Filter {Samaccountname -eq $samAccountName} -Server $domain
    if ($query) {
        $query | Set-ADUser -server tstdc01-Company "New Company"
        $setUsers += $query
    }
}

正如 Santiago 暗示的那样,这看起来像是跨域或林通信的问题。 And/or 您正在传递一个域中的用户并试图将其设置到另一个域中。

here, and a link here

顺便提几点;当您已经拥有 samAccountName 时,您不需要过滤 samAccountName,查询可以是这样的:

$setUsers =
Get-ADUser $samAccountName -Server $domain |
ForEach-Object{
    Set-ADUser $_ -Server tstdc01 -Company "New Company" -PassThru    
}

另请注意:您应该避免 += 我不知道这是一项多大的工作,但它会降低性能,因为它会导致创建新数组和现有数组的副本。重复多次可能会导致严重的性能问题。有多种方法可以解决这个问题,但首选方法是让 PowerShell 为您收集结果。所以上面将 $setUsers 变量分配给循环的输出。添加-PassThru输出设置的对象

更新: 关于 += 的观点,@SantiagoSquarzon 指出我们甚至不再需要循环:

$setUsers =
Get-ADUser $samAccountName -Server $domain |
Set-ADUser -Server tstdc01 -Company "New Company" -PassThru