Изменение имени участника-пользователя через Powershell - PullRequest
2 голосов
/ 07 ноября 2019

Я работаю над изменением 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. Возможно, это не совсем то, что рекомендуетсясделать это, но это сработало.

...