Я работаю над изменением UPN всех пользователей через Powershell. Я запускаю следующий скрипт без ошибок. Тем не менее, ни один из UPN не меняется. Когда я запускаю частичный скрипт для получения свойств, я вижу дополнительную информацию о свойствах.
Скрипт для изменения имени участника-пользователя:
$ou = "DC=companyname,DC=office"
$local = Get-ADUser -SearchBase $ou -filter * -Properties userPrincipalName -ResultSetSize $null
$local | foreach {
$newUpn = $_.UserPrincipalName.Replace("companyname.office", "companyname.com")
$_ | Set-ADUser -UserPrincipalName $newUpn
}
Я получаю следующие ошибки:
You cannot call a method on a null-valued expression.
At Y:\it\powershell scripts\upn_change.ps1:11 char:19
+ ... | ForEach {$newUpn = $_.UserPrincipalName.Replace("companyname.office"," ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Set-ADUser : The operation failed because UPN value provided for addition/modification is not unique forest-wide
At Y:\it\powershell scripts\upn_change.ps1:11 char:96
+ ... e.office","companyname.com"); $_ | Set-ADUser -UserPrincipalName $newUpn}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=Guest,CN=Users,DC=ComanyName,DC=office:ADUser) [Set-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8648,Microsoft.ActiveDirectory.Management.Commands.SetADUser
Я знаю, что изменение пользователя с .office на .com работает, поскольку у меня есть небольшая группа тестов, с которой я работал, которую я изменил вручную.
Обновление:
Обновлен скрипт для замены $_.UserPrincipalName.Replace
на $local[0].UserPrincipalName.Replace
вместе с использованием тестовой OU вместо полной AD. Сейчас я получаю только вторую ошибку.
Set-ADUser: операция завершилась неудачно, поскольку значение UPN, предоставленное для добавления / изменения, не является уникальным для всего леса. В Y: \ it \ powershell scripts \ upn_change.ps1: 11 char: 103 + ... e.office "," companyname.com "); $ _ | Set-ADUser -UserPrincipalName $ newUpn} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (CN = Daniel McInt ... riese, DC = office: ADUser) [Set-ADUser], ADException + FullyQualifiedErrorId: ActiveDirectoryServer: 8648, Microsoft.ActiveDirectory.Management.Commands.SetADUser
Welp - не уверен, что я сделал.
Я нашел другой скрипт в Интернете.
$upn = Get-Aduser...... (essentially the same as $local above). The rest is what I think did it - foreach { Set-ADUser $_ -UserPrincipalName ("{0}@{1}" -f $_.name,"kfriese.com")}
Таким образом, весь сценарий выглядит следующим образом:
$upn | foreach { Set-ADUser $_ -UserPrincipalName ("{0}@{1}" -f $_.name,"kfriese.com")}
И теперь все хорошо. Я использовал свое тестовое подразделение, и все номера UPN изменились на .com. Возможно, это не совсем то, что рекомендуетсясделать это, но это сработало.