Para corrigir seu problema com a menor alteração de código necessária, você deve alterar sua referência $SAM
para $User
na chamada Set-ADUser
. Você está definindo mailNickName para o objeto de usuário retornado por Get-ADUser
e não para o sAMAccountName no qual você está interagindo.
Seus nomes de variáveis são um pouco confusos, porque são nomeados um pouco opostos ao que os nomes realmente representam. Em seu código $SAM
é, na verdade, uma lista de objetos ADUser que possuem todas as suas propriedades filtradas, exceto para samaccountname. Sua variável $User
no loop foreach é, na verdade, a string samaccount de cada objeto de usuário.
Aqui está uma pequena variação do seu código com nomes de variáveis alterados e a instrução select estranha removida.
$users = Get-ADUser -SearchBase "OU=Staged,OU=cor,DC=mycompany,DC=com" -Filter *
foreach ($user in $users) {
Set-ADUser $user -Replace @{ mailNickName = "$($user.samaccountname)" }
}
Aqui está outra variação que usa% al_de% alias de ForEach-Object
diretamente contra os resultados da chamada %
.
Get-ADUser -SearchBase "OU=Staged,OU=cor,DC=mycompany,DC=com" -Filter * | %{
Set-ADUser $_.DistinguishedName -Replace @{ mailNickName = $_.samaccountname }
}