Come importare gli utenti in Active Directory da un file CSV utilizzando PowerShell

Una delle applicazioni più comuni di PowerShell che vengono utilizzate dai professionisti IT è la sincronizzazione delle informazioni con Active Directory (AD). Sembra che tutti abbiano una fonte di dati esterna correlata ad alcuni dipendenti che bisogna inserire in AD. Ciò è prevedibile perché AD è in genere il servizio IT più utilizzato nelle organizzazioni e fornisce un’eccellente funzionalità non solo come autenticazione, ma anche come archivio di informazioni sui dipendenti.

Anche se i tuoi dati sono archiviati in un database SQL personalizzato o in un sistema HR di ultima generazione, è spiacevole dover verificare due fonti se hai bisogno di informazioni come il dipartimento del dipendente, i gruppi di cui il dipendente dovrebbe far parte e così via. Quando inizi a sincronizzare i dati, il sistema di origine può cambiare schema, API, server e così via, il che comporta una rielaborazione del codice. Per assicurarti che l’origine dei dati da cui stai effettuando la sincronizzazione rimanga sempre la stessa e possa essere facilmente creata da qualsiasi sistema, è opportuno che i dati vengano inseriti in un file CSV.

Un semplice file CSV può essere esportato da qualsiasi software o database e, in questo formato, l’amministratore dispone di una copia che può modificare se necessario, evitando così le richieste di un altro team di modificare un database da qualche parte.

Procediamo con un semplice script che puoi usare oggi per importare gli utenti in Active Directory da un file CSV.

Per cominciare, supponiamo di avere un CSV chiamato C:Employees.csv. Il CSV ha tre colonne: Nome, Cognome e Reparto. Desideri uno script che trovi l’account AD associato a quel nome/cognome e che modifichi il reparto in quello indicato nel CSV.

Questo script, come ogni script di sincronizzazione, sarà composto principalmente da tre “fasi”. Le “fasi” sono la lettura dei dati di origine (CSV in questo esempio), la ricerca dell’ID univoco dei dati di origine di destinazione che corrisponde ai dati di origine (AD samAccountName in questo esempio) e infine la scrittura degli attributi associati legati a quell’account.

Il primo passo è la lettura del file CSV.

$csvUsers = Import-Csv -Path 'C:Employees.csv'

Fatto. La parte successiva consiste nel trovare l’ID univoco da abbinare a ogni riga del file CSV. Poiché non abbiamo l’ID univoco all’interno del CSV, dobbiamo costruirne uno all’istante. Per ottenere questo ID univoco, supporremo che l’iniziale del nome e il cognome di un dipendente corrispondano sempre a un nome di account AD samAccountName. Dovremo creare questa ricerca samAccountName e poi eseguire una query AD per vedere se esiste un account.
Nota: Prima di andare avanti, assicurati di aver scaricato e installato gli Strumenti di amministrazione del server remoto per il tuo sistema operativo. In questo modo otterrai il modulo PowerShell di Active Directory contenente le cmdlet Get-AdUser e Set-AdUser che utilizzeremo.

foreach ($csvUser in $csvUsers) {
    $userName = '{0}{1}' -f $csvUser.FirstName.SubString(0,1),$csvUser.LastName
    if ($adUser = Get-AdUser -Filter "samAccountName -eq $userName" -Properties $attributesToSync) {
        ## Il nostro "ID unico" è stato trovato. Procedi alla lettura dei dati CSV e alla scrittura degli attributi
    } else {
        Write-Warning -Message 'Corrispondenza utente non trovata'
    }
}

Una volta ottenuto un account AD con cui lavorare, possiamo leggere ogni attributo associato al nome del dipendente nel file CSV e scrivere le informazioni nell’account AD trovato. Di seguito si può notare che si sta definendo la variabile $attributesToSync, per poi leggerla in un secondo momento. In questo modo è possibile aggiungere altri attributi che potrebbero essere presenti nel CSV per sincronizzare anche quelli in futuro. L’esempio seguente verifica innanzitutto se l’attributo è lo stesso. In caso contrario, si utilizza Set-AdUser per cambiarlo.

$attributesToSync = 'Dipartimento'
foreach ($csvUser in $csvUsers) {
    $userName = '{0}{1}' -f $csvUser.FirstName.SubString(0,1),$csvUser.LastName
    if ($adUser = Get-AdUser -Filter "samAccountName -eq $userName" -Properties $attributesToSync) {
        foreach ($attr in $attributesToSync) {
            if ($csvUser.$_ -ne $adUser.$_) {
                $setParams = @{$_ = $csvUser.$_}
                $adUser | Set-AdUser @setParams
            }
        }
    } else {
        Write-Warning -Message 'Corrispondenza utente non trovata'
    }
}

Questo esempio funziona solo con gli attributi che sono valori stringa all’interno di AD. Presta attenzione agli attributi come il gestore, la data di scadenza dell’account e così via. Questi attributi richiedono la costruzione di un oggetto del tipo corretto prima di essere scritti in AD. Ci vorrebbe un’altra serie di articoli per esaminare le complessità della sincronizzazione di AD e del lavoro con i diversi attributi, ma abbiamo creato un PowerShell chiamato PSADSync che ti assisterà in questo senso. Puoi trovarlo estraendolo dalla Galleria PowerShell con Install-Module PSADSync.

Adam Bertram è un MVP di Microsoft Windows Cloud e Datacenter Management ed è autore di vari corsi di formazione, collabora regolarmente a numerose pubblicazioni cartacee e online e presenta a vari gruppi di utenti e conferenze. Puoi trovare Adam all’indirizzo adamtheautomator.com o su Twitter all’indirizzo @adbertram.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più sulla distribuzione remota di script con NinjaOne, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.