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 }
}