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
我正在尝试通过 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