Windows PowerShellAutomazione utente provisioning, parte 1

Don Jones

Contenuto

Impostazione degli obiettivi
La struttura iniziale di creazione
Ottenere input
Espansione
Provenienti su Avanti

Con questa colonna mi kicking disattivare una serie di quattro parti sulla creazione di uno script pratico reali, provisioning dall'utente in Windows PowerShell.In questa prima parte, verrà concentrarsi sul creazione della struttura per lo script.Mese successivo prenderò in esame effettivamente creazione di un nuovo utente abilitati all'utilizzo della cassetta postale in Active Directory ed Exchange Server 2007.Il mese successivo, verrà occorre prestare attenzione di creare le home directory e applicare il corretto Access Control Lists (ACLs) a loro.E nella dispensa finale È necessario inserire il nuovo utente in gruppi comporta la liberazione di compilazione gli attributi aggiuntivi di Active Directory.

Video

Don Jones interviene disattivare una serie di quattro parti osservando come è possibile utilizzare Windows PowerShell per creare un utente provisioning script.Controllare Don illustrare le tecniche in questo video.

Impostazione degli obiettivi

La parte di provisioning utente trickiest è decidere dall'origine dati iniziali.Come verrà sapere quali utenti possono creare?E dove sarà possibile ottenere le informazioni, quali nomi, indirizzi di posta elettronica, indirizzo postale, reparto e altri dettagli?

Quasi ogni ambiente avrà una risposta diversa e pertanto Creerò uno script che è in grado di accettare input da un'ampia gamma di risorse.Che renderà script leggermente più complicato, ma verrà essere opportuno lo sforzo di lungo termine perché lo script non sarà più flessibile.Si desidera creare uno script in grado di creare nuovi utenti di 100 con la stessa facilità di una, tratta sull'automazione, dopotutto.

La struttura iniziale di creazione

Eseguire una quantità decent di con diverse società di consulenza e numerose lo stato attivo è su scripting e automazione.Non sorprendentemente, è possibile vedere numerosi script e HO notato che un approccio comune è per un amministratore di creare solo un singolo script provisioning.

Nel tempo, l'amministratore modificherà lo script per gestire più attività.Che non un approccio non valido, ma richiede tempo massimo front-end per creare un po'più struttura modulare, consente di creare uno script che è effettivamente più flessibile e facile da gestire.E questo non richiede molto lavoro aggiuntivo.

Verrà per iniziare con una funzione centrale denominata Provision.Succede non effettivamente è molto molto; accetterà una tabella hash, o matrice prevedono l'associazione all'operando, che contiene le nuove informazioni utente e quindi chiamerà una serie di sub-functions effettivamente gestire tutte le attività di provisioning.Poiché si tratta di Windows PowerShell, opportuno tutti a questo scopo nella pipeline.Pertanto verrà per consentire l'accettazione di una tabella hash per ogni nuovo utente e attiva ad accettare una conduttura intera di Hashtable per la creazione di più utenti.

Il modello di base della funzione è simile al seguente:

Function Provision {
  PROCESS {
  }
}

Non molto significativa è? Con Windows PowerShell non necessario. Tale blocco di script PROCESS viene eseguito una volta per ogni oggetto pipe nella funzione. E all'interno del blocco di script PROCESS, utilizzerà la variabile $ _ per accedere all'oggetto pipeline corrente.

Windows PowerShell domande e risposte su

D È controllata la classe WMI (Win32_OperatingSystem Windows Management Instrumentation) sul sito Web MSDN. Indica che la classe contiene informazioni versione di service pack. Quando eseguo Win32_OperatingSystem WmiObject Get in Windows PowerShell, non viene visualizzata nessuna informazione di service pack. Perché?

A il Windows PowerShell formattazione sottosistema seleziona un sottoinsieme di predefinito delle proprietà di tale classe per la visualizzazione. Un modo per forzare per visualizzare tutte le proprietà consiste nell'utilizzare un cmdlet di formattazione per ignorare le impostazioni predefinite:

Get-WmiObject Win32_OperatingSystem | Format-List *

Oppure, se si desidera solo le proprietà specifiche:

Get-WmiObject Win32_OperatingSystem | 
Format-List BuildNumber,CSName,ServicePackMajorVersion

Ottenere input

Il motivo che non si dispone la funzione Provision effettivamente ottenere i dati su un proprio è che desidera maggiore flessibilità e si desidera tornare indietro e modificare la funzione ogni volta che si desidera adottare una nuova maschera di input. In alternativa, è possibile verrà creare due funzioni che ottengono le informazioni di nuovi utenti, ovvero uno da un file CSV e l'altro da un database. Per ora, verrà solo lavoro sulla funzione correlate CSV poiché i file CSV sono semplice creare con il Blocco note o un altro editor di testo (o anche Microsoft Excel e la maggior parte delle applicazioni di database).

Uno scherzo sulle CSVs, soprattutto se fornito da un utente inclined meno tecnicamente, è che è non fare affidamento sul fatto intestazioni di colonna del file da corretti attributi di Active Directory. Anziché i nomi di colonna, ad esempio sn e samAccountName, è probabile più ottenere i nomi di colonna ad esempio cognome e nome di accesso. Problema, Windows PowerShell è possibile eseguire la conversione. Inizierà da supponendo che un file con estensione CSV contiene le colonne seguenti:

  • Nome
  • Cognome
  • Città
  • Reparto
  • Titolo professionale
  • Nome di accesso
  • Password

È possibile, naturalmente, espandere l'elenco, spiegato come funziona in un momento. Potrebbe utilizzando questo elenco, un file CSV esempio essere analogo questo:

First Name,Last Name,City,Department,Job  Title,Logon Name,Password
Don,Jones,Las Vegas,IT,Writer,donj,P@ssw0rd
Greg,Shields,Denver,IT,Administrator,gregs,  P@ssw0rd

Verrà creare una funzione denominata ProvisionInputCSV, che accetta un nome di file come parametro di input e che semplicemente leggere il file con estensione CSV:

Function ProvisionInputCSV {
  Param ([string]$filename)
  Import-CSV $filename
}

È possibile eseguire tale funzione, ad esempio pertanto, solo per garantire di lettura del file CSV:

ProvisionInputCSV c:\files\myinput.csv

Ora si desidera avere la funzione di tradurre ciascuna riga di con l'estensione CSV in una tabella hash. E, anziché mantenere i nomi di intestazione di colonna dal file CSV, desidera tradurre le intestazioni di colonna in nomi di attributo di più Active Directory-accettabile. Sono disponibili diversi modi a tale scopo in Windows PowerShell, ma verrà osserva un approccio relativamente semplice: è possibile utilizzare un ciclo foreach per elaborare ogni riga del file con estensione CSV, uno alla volta. Per ogni riga del file, verrà creare una tabella hash e scrive per la pipeline.

Esaminiamo la funzione, illustrato nella Figura 1 . Esistono alcuni punti notare:

  • All'interno del blocco di foreach, la variabile di utente $ contiene un singolo utente. Il costrutto foreach viene eseguito tramite ogni riga nella variabile $ degli utenti e automaticamente compila $ utente con quella successiva.
  • Poiché una parte i nomi delle intestazioni di colonna contengono spazi, è necessario che tali nomi è possibile racchiudere tra virgolette.
  • È stato aggiunto un altro attributo, displayName, viene costruito da due colonne con estensione CSV: nome e cognome.
  • Output per la scrittura viene utilizzata per scrivere ogni tabella di hash per la pipeline.

Figura 1 funzione utilizzando un ciclo foreach

Function ProvisionInputCSV {
  Param ([string]$filename)
  $users = Import-CSV $filename
  foreach ($user in $users) {
    $ht = @{'givenName'=$user."First Name";
            'sn'= $user."Last Name";
            'title'= $user."Job Title";
            'department'= $user.Department;
            'displayName'= $user."First Name" + " " + $user."Last Name";
            'city'= $user.City;
            'password'= $user.Password;
            'samAccountName'= $user."Logon Name"
           }
    Write-Output $ht
  }
}                                                  
 

Il upshot pratici di tutti i questo è che È possibile utilizzare una funzione per leggere il file e trasformare i dati in Hashtable. La Hashtable può quindi essere reindirizzato per la funzione provisioning:

ProvisionInputCSV c:\data\myinput.csv | Provision

Poiché la funzione Provision accetta un hashtable standard, È possibile creare più funzioni di generazione input diversi, ProvisionInputDatabase, Pro­visionInputSpreadsheet, e così via.

Purché tali funzioni output la tabella hash standard completa dei dati utente, la funzione principale di Provision funzionerà correttamente. Questo approccio significa in futuro, possibile utilizzare origini di input completamente nuovo per nuovi dati utente, senza dover modificare il nucleo Provision funzione.

Espansione

È possibile aggiungere ulteriori colonne alla versione di file CSV per inserire elementi ad esempio i numeri di telefono o qualsiasi altro dato desiderato. Si desidera assicurarsi che si espande inoltre hashtable per contenere le informazioni. Ad esempio, si supponga che desideri aggiungere il file con estensione CSV descrizione e Office. Semplicemente possibile espandere la tabella hash aggiungendo delle righe, come illustrato nella Figura 2 . In altre parole, è possibile utilizzare la struttura di base che presentiamo per soddisfare qualsiasi requisiti dispone di ambiente per gli attributi di directory di nuovi account utente.

Nella figura 2 revisionato funzione

Function ProvisionInputCSV {
  Param ([string]$filename)
  $users = Import-CSV $filename
  foreach ($user in $users) {
    $ht = @{'givenName'=$user."First Name";
            'sn'= $user."Last Name";
            'title'= $user."Job Title";
            'department'= $user.Department;
            'displayName'= $user."First Name" + " " + $user."Last Name";
            'city'= $user.City;
            'password'= $user.Password;
            'samAccountName'= $user."Logon Name";
            'office' = $user.office;
            'description' = $user.description
           }
    Write-Output $ht
  }
}

Provenienti su Avanti

Prossimo mese, inizierà di compilazione la funzione Provision principale creando un sub-function che crea nuovi account utente. È necessario consentono due versioni di tale funzione secondaria, uno per utenti che dispongono di Exchange Server 2007 (che corrisponde a Windows PowerShell abilitato) e l'altro per utenti che non. A questo punto, è effettivamente necessario uno script piuttosto utilizzabile:, verrà semplicemente creare account utente. Ma poiché è una delle parti più dispendiosa in termini di tempo di gestione di nuovi utenti, questa funzione può avviare risparmiando tempo immediatamente.

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