Windows PowerShell Automazione utente provisioning, parte 4

Don Jones

Contenuto

Decidere in input
Compilazione gruppi
Attributi aggiuntivi
Richiede ulteriori
Alcuni pensieri finale

Si tratta la conclusione di una serie di quattro parti in cui È stato illustrato come automatizzare il processo di provisioning di nuovi utenti in Active Directory. Finora È stato illustrato come creare il nuovo utente account di Active Directory, creare le cartelle principali e assegnare autorizzazioni a queste cartelle principali. A questo punto, È necessario aggiungere gli utenti a alcuni gruppi di dominio e aggiornare alcuni attributi di directory.

Per aggiornare rapidamente la memoria, STO utilizzando una funzione principale di coordinare tutti questi sforzi, cui È illustrato nella parte 1 di questa serie. La funzione principale è simile al seguente:

Function Provision {
  PROCESS {
    CreateUser $_
    CreateHomeFolder $_
    AddToGroups $_
    UpdateAttributes $_
  }
}

Nella parte 2 della serie, è stata creata la funzione CreateUser e nella part 3, coperta la funzione CreateHomeFolder. Questo mese, verrà affrontare le funzioni AddToGroups e UpdateAttributes.

Decidere in input

Tutte e quattro i funzioni ottenere una tabella hash che contiene gli attributi dell'utente. Mio esempio originale, nella parte 1, leggere gli attributi da un file valori Comma-Separated (con estensione CSV). Al momento, è possibile non utilizzare molto profondità sul modo in cui È pianificata per comunicare il dominio gruppi di un utente deve essere aggiunto. Esistono molti modi che potenzialmente possibile farlo. Ad esempio, potrebbe avere i file CSV, includere una sola colonna denominata categorie e compilare tale colonna con alcuni elenco delimitato di nomi di, simile al seguente:

"Domain Users,Sales,Marketing,East"

O, Impossibile presente una colonna separata in CSV per ogni gruppo e quindi sui dati righe inserire 1 quando l'utente deve appartenere che gruppo e 0 per i gruppi non desidera che l'utente appartenenti a. Potrebbe essere simile questo nel CSV:

Domain Users,Sales,Marketing,East
1,1,0,0
1,0,1,1

Ritiene che il secondo approccio potrebbe essere più semplice per una persona di tecniche di minore (probabilmente qualcuno del reparto delle risorse umane) per l'utilizzo con poiché sembra un po'più come un elenco di controllo. Questo è un elemento è possibile creare con facilità in una tabella di Microsoft Access o un foglio di calcolo di Microsoft Excel e quindi esportare in un file con estensione CSV, mantenendo il formato. Pertanto, per questo esempio, verrà per passare al layout di secondo.

Come per gli "attributi aggiuntivi", verrà continuare a presuppongono che quelli provenienti da colonne specifiche il file. Si supponga ad esempio, se desidera inserire l'attributo postalCode, quindi si che è inclusa una colonna appropriata nel file CSV e che la funzione Import (che È stato discusso nella sezione 1 di questa serie) viene letta la colonna nella tabella hash insieme alle altre colonne.

Che significa che la tabella hash può contengono simile $ userinfo ['Domain Users'], che sarebbe 1 se desidera all'utente di appartenenti a tale gruppo. La tabella hash potrebbe anche contenere $ userinfo ['postalCode'] con il valore appropriato per ogni nuovo utente.

Compilazione gruppi

La funzione AddToGroups deve contenere ogni gruppo di possibile che è possibile che siano elencati nei file di input. In sostanza solo verrà cercare ogni gruppo per visualizzare se l'utente ha un 1 o 0 e se l'utente dispone di 1, quindi È necessario aggiungere l'utente il gruppo. Poiché il numero 0 è in genere sinonimo il valore booleano false, mentre non nulla, zero (ad esempio, 1) è sinonimi con valore true, che renderà i confronti piuttosto semplice. Pertanto, la funzione aspetto seguente:

Function AddToGroup {
  Param($userinfo)
  If ($userinfo['Sales']) { Add-QADGroupMember 
    -identity 'DOMAIN\Sales' '
    -member ('DOMAIN\'+$userinfo
     ['samAccountName']) }
  If ($userinfo['East]) { Add-QADGroupMember 
    -identity 'DOMAIN\East' '
    -member ('DOMAIN\'+$userinfo
     ['samAccountName']) }
  If ($userinfo['Marketing]) { Add-
    QADGroupMember 
    -identity 'DOMAIN\Marketing' 
    -member ('DOMAIN\'+$userinfo
     ['samAccountName']) }
}

E così via. Tenere presente che è ancora sta utilizzando il cmdlet Quest di Active Directory, che sono liberi di www.Quest.com/PowerShell.

Codice ripetitivo che bugs me. RITENGO che ciò che si desidera eseguire è invece di creare una matrice di nomi di gruppi possibili e quindi enumerare tale matrice. In questo modo, aggiungendo e rimuovendo i gruppi in futuro non richiede di copiare e incollare il codice, semplicemente necessario modificare la matrice. A questo punto la funzione aspetto seguente:

Function AddToGroup {
  Param($userinfo)
    $groups = 'Sales','Marketing','East'
  Foreach ($group in $groups) {
    If ($userinfo[$group]) { 
      Add-QADGroupMember
        -identity 'DOMAIN\'+$group
        -member ('DOMAIN\'+$userinfo
         ['samAccountName']) }
}
}

Un po'leaner e pulitura e verrà contenere facilmente eventuali modifiche future.

Attributi aggiuntivi

Infine, È necessario gestire eventuali attributi aggiuntivi che desidero impostare. Di seguito sono prevede di utilizzare lo stesso approccio: creare una matrice di nomi attributo consentito e quindi enumerare tale matrice. In questo caso, verrà per consentire una situazione in cui uno o più attributi sono vuoti per un determinato utente, in questo modo:

Function UpdateAttributes {
  Param($userinfo)
    $attribs = 'postalCode','title',
      'physicalDeliveryOfficeName'
  Foreach ($attrib in $attribs) {
    If ($userinfo[$attrib] –ne '') {
      $update = @{$attrib=$userinfo
       ['attrib']}
    Set-QADUser
      -identity 'DOMAIN\'+$userinfo
       ['samAccountName'] 
      -objectAttributes $update
    }
  }
}

Il cmdlet QADUser set accetta effettivamente una tabella hash per il parametro –objectAttributes, si potrebbe pensare di che È possibile solo feed è la tabella hash userinfo $. Tuttavia, È necessario operazioni in posizione, quali nomi di gruppo che non sono nomi di attributo di Active Directory, pertanto non utilizzare tale accorgimento. Inoltre, si desidera inviare gli attributi vuoti, in modo che si desidera la possibilità, come HO fatto con questa funzione, eseguita tutti gli attributi e quindi aggiornare solo gli attributi effettivamente sono presenti valori il file originale.

Richiede ulteriori

Ovviamente esistono numerose operazioni che è impossibile eseguire per espandere questo script. Ecco alcune idee per tenere:

  • Invece di recuperare informazioni da un file con estensione CSV, è possibile ottenere da un database (ad esempio un database del personale). È solo necessario sostituire la funzione di importazione, come descritto nella sezione 1 di questa serie.
  • È possibile eseguire altre attività di provisioning. È sufficiente aggiungere ulteriori funzioni alla funzione Provision master. Ricordarsi di mantenere ciascuna attività principale in una funzione subordinata specifica e operazioni verrà apportare più facile da scrivere, eseguire il debug e mantenere.
  • È possibile scrivere un file di registro di attività di provisioning. Ad esempio, è possibile utilizzare Out-File accodare testo a un file di registro in ognuna delle funzioni subordinate.
  • Utilizzando le tecniche trattato in questa serie, è possibile scrivere uno script reprovisioning per riassegnare i gruppi, autorizzazioni e gli attributi di Active Directory quando si sposta in una posizione diversa all'interno della società.

Windows PowerShell domande e risposte su

D Quali prodotti di Microsoft possono essere gestiti con i cmdlet di Windows PowerShell?

AAttualmente, l'elenco include Exchange Server 2007, System Center Virtual Machine Manager, System Center Operations Manager e System Center Data Protection Manager. SQL Server 2008 include anche alcuni cmdlet di Windows PowerShell, Sebbene gran parte si sono destinate consentendo l'esecuzione di istruzioni Transact-SQL (Transact-SQL dal linguaggio di script nativo in SQL Server).

Ma c'è alcun motivo per interrompere presenti. È inoltre possibile gestire Active Directory mediante un insieme disponibile di cmdlet da www.Quest.com/PowerShell; cmdlet per Internet Information Services (IIS) 7.0 sono in fase di sviluppo, e vi sono cmdlet anche per i prodotti non Microsoft, ad esempio VMWare IBM WebSphere MSMQ e, più. È possibile utilizzare gli strumenti della riga di comando esistenti per gestire i componenti di Windows, ad esempio IIS, DNS, DHCP, Windows Firewall e altro ancora.

Alcuni pensieri finale

Spero che è disponibile lo script completato e tutte le relative funzioni subordinate per, almeno, un utile punto di partenza nella creazione di script di provisioning. Tramite di conclusione, si desidera offrire alcuni commenti su parte le decisioni effettuate in.

Scelto di utilizzare Hashtable per le informazioni utente anziché gli oggetti personalizzati perché Hashtable forniscono un metodo piuttosto semplice per enumerare una serie di proprietà quando non so in anticipo quale sarà tutte queste proprietà. In altre parole, Hashtable sono un po'più semplice da utilizzare quando so che È necessario aggiungere ulteriori attributi e quando non potrebbero utilizzare gli stessi attributi ogni volta che è possibile eseguire lo script.

HO scelto di utilizzare cacls.exe per modificare autorizzazioni cartella perché, come descritto nella parte 3 di questa serie, è sufficiente semplificare notevolmente la shell *-cmdlet elenco di controllo di accesso. Inoltre, tramite cacls.exe consentita per illustrare un metodo è possibile parametrizzare strumenti esterni della riga di comando utilizzando le variabili di shell.

Scelto di utilizzare del Quest cmdlet di Active Directory anziché ADSI poiché il cmdlet offrono ciò che ritiene è un approccio più nativo per la modifica della directory in Windows PowerShell. ADSI può essere un problemi su cui lavorare e impone per utilizzare uno stile di programmazione più procedure su sono riuscito a utilizzare in questo esempio lo stile di comandi al centro.

Indipendentemente dal fatto che si sceglie di decisioni stessa per gli script, spero, sono disponibili queste tecniche e diversi approcci utile per risolvere una parte la difficoltà di automazione amministrativo. È possibile inoltre invitare è possibile condividere i suggerimenti e miglioramenti con me. Nel mio sito Web ConcentratedTech.com, è disponibile una pagina di contatti in cui si Benvenuti inviarmi un messaggio di posta elettronica. E, accertarsi di consente di sapere se È possibile condividere i commenti in un numero futuro di TechNet Magazine.

Don Jones è un cofondatore di Tecnologia concentrano, in cui ha blog settimanali sulle applicazioni di Windows PowerShell, SQL Server-V e altri argomenti. Contattarlo tramite il suo sito Web.