Aggiornare attributi Active Directory con Powershell


Active Directory soprattutto nelle aziende di dimensioni medio-grandi  è spesso utilizzata come strumento per salvare molte informazioni personali relative agli utenti, numeri di telefono, indirizzo, reparto di appartenenza anche perché molti strumenti aziendali, come per esempio la gestione dei ticket di help desk, possono utilizzare direttamente le informazioni presenti direttamente in Active Directory in maniera che non bisogna prevedere un massiccio data-entry in fase di setup dell’applicativo o, molto più semplicemente, evitare la gestione di due elenchi differenti con tutto quello che potrebbe conseguire.

Ma cosa succede se dovessimo trovarci nella situazione di aggiornare massivamente il valore di un attributo di Active Directory, ad esempio a causa di un rebranding,  all’interno di una OU o magari del dominio intero?

Powershell in questo caso è uno strumento potentissimo che ci può aiutare ad eseguire questa modifica in tempi velocissimi che può evitare parecchie ore di lavoro sul domain controller con un’alta possibilità di commettere errori di battitura.

Vediamo insieme un esempio di script in Powershell che ho preparato che ha come scopo di sostituire il dominio presente dell’attributo email dei vari utenti Active Directory con nuovo (capita spesso in caso di rebrending / nuove acquisizioni):

 

Import-Module ActiveDirectory

$dataSource=Get-ADUserSearchBase “OU=test,DC=testcannizzo,DC=local” –Properties EmailAddress Filter * | Select-Object –Property SamAccountName,EmailAddress

foreach($dataRecord in $datasource) {
$employeeID=$dataRecord.SamAccountName

email=$dataRecord.EmailAddress
if($email -match ‘vecchiodominio‘) {$email=$email –replacevecchiodominio“,”nuovodominio“}

Get-ADUser -Identity $employeeID | Set-ADUser
Partiamo dall’inizio per prima cosa lo script importa il modulo di Active Directory con il comando

Import-Module ActiveDirectory

E successivamente salva nella variabile datasource  l’elenco degli account ed indirizzi email che trova OU di test con il comando

$dataSource=Get-ADUserSearchBase “OU=test,DC=testcannizzo,DC=local” –Properties EmailAddress Filter *  | Select-Object –Property SamAccountName,EmailAddress

Dopo aver salvato il tutti gli utenti e i dati necessari su cui lavorare nella variabile datasource, lo script esegue un ciclo di tipo foreach in maniera tale da poter elaborare e sostituire il vecchio dominio dell’attributo email con il nuovo singolarmente per ciascun account e procede quindi al salvataggio del nuovo valore  in Active Directory con questa serie di comandi:

foreach($dataRecord in $datasource) {
$employeeID=$dataRecord.SamAccountName

email=$dataRecord.EmailAddress
if($email -match ‘vecchiodominio‘) {$email=$email –replacevecchiodominio“,”nuovodominio“}

Get-ADUser -Identity $employeeID | Set-ADUser

 

Ovviamente è consigliabile eseguire tutte le prove necessarie per accertarsi della corretta esecuzione dello script in ambiente di test prima di eseguire lo script in ambiente di produzione dove le modifiche sono permanenti e si potrebbero verificare disservizi in caso di errore