O Powershell realmente brilha para tarefas de limpeza como essa.
Import-Module ActiveDirectory
$allUsers = Get-ADUser -Filter * -Properties cn,displayName
foreach ( $u in $allUsers | Where-Object { ($_.givenName) -and ($_.surName) } ) {
$fn = $u.givenName.Trim()
$ln = $u.surName.Trim()
Write-Host $fn $ln
Set-ADUser -Identity $u -DisplayName "$fn $ln" -GivenName "$fn" -SurName "$ln" -PassThru |
Rename-ADObject -NewName "$fn $ln"
}
Advertências:
- Estou
Trim()
ing ogivenName
esurName
para remover espaços iniciais / finais. Devolvemos esses dois para a conta, além de corrigirdisplayName
ecn
. - Escopie seu
-Filter
inGet-ADUser
para reunir apenas os usuários desejados. O*
irá pegar todos no domínio, incluindo built-ins, admins, etc. Isso provavelmente não é o que você quer. :) - A parte
Where-Object
doforeach
irá ignorar objetos de usuário que não tenham o atributogivenName
esurName
. - Se você precisar jogar com o objeto de usuário renomeado, adicione um
-PassThru
ao final da linhaRename-ADObject
e o objeto será passado de volta para você.