Windows PowerShellAutomazione utente provisioning, parte 2

Don Jones

Contenuto

Creazione di un utente
Mancante Exchange?
Opzioni di opzioni, opzioni

Nella dispensa precedente di questo articolo, è stata creata la base per un utente automatico provisioning script.È stata creata una funzione denominata ProvisionInputCSV progettato per leggere le informazioni utente da un file CSV e restituire tale informazioni sotto forma di una tabella hash.Tale approccio ha richiesto perché è consentito di creare più altre "importare funzioni, da un database di importazione, importare da un foglio di calcolo o qualsiasi, e ogni restituito uno un hashtable identici ricerca.La funzione di provisioning effettivo deve semplicemente di accettare tale tabella hash, che può contenere elementi per un utente nome, l'ultimo nome, città, reparto e così via.

In mese questo, È possibile iniziare l'utilizzo di tale tabella hash per creare un nuovo utente abilitati all'utilizzo della cassetta postale in Active Directory o un utente non della cassetta postale, se non si utilizza Exchange Server 2007.

La struttura di base della funzione provisioning è simile al seguente:

Function Provision {
  PROCESS {
  }
}

Già stato stabilito che la funzione riceverà una tabella hash della pipeline, avrà accesso mediante la variabile $ _ speciale all'interno il scriptblock PROCESS. La tabella hash avrà chiavi che corrispondono a attributi dell'utente e i valori di tali tasti conterrà informazioni di ciascun utente. Di seguito sono riportati alcuni esempi:

  • $ _ ['sn"] = "Jones"
  • $ _ ['givenname"] = "Don"
  • $ _ ['sAMAccountName'] = "donj"

Esatti attributi disponibili dipende da ciò che è stato inserirvi la funzione ProvisionInputCSV o altra funzione di importazione.

Tenere presente che in genere provisioning utente implica diversi passaggi, quali la creazione di un account, creazione di una cartella e così via. Sarebbe facile da applicare tutte le attività nella funzione Provision, ma in questo modo potrebbe rendere la funzione piuttosto complicata, e più complicato più difficile eseguire il debug e risoluzione dei problemi. Verrà invece utilizzata la funzione Provision come un ordinamento dell'elenco attività generale, suddividere ogni attività nella propria funzione filiale. In conclusione, la funzione Provision avrà l'aspetto seguente:

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

Windows PowerShell domande e risposte su

D non vedo un parametro –computerName su molto molti cmdlet. Windows PowerShell può essere utilizzato per gestire i computer remoti?

versione di Windows PowerShell A 1 è limitata le funzionalità di servizi remoti. Il cmdlet Get-WmiObject offre, come potrebbe hanno scoperto, un parametro computerName in modo che è possibile recuperare informazioni da uno o più computer remoti, in questo modo:

Get-WmiObject Win32_Service –computerName
  "localhost","server2","server3"

Ma sulla funzionalità di gestione remota solo incorporati che sono disponibili nella prima versione di Windows PowerShell.

Altre tecnologie, ad esempio server di Exchange e Active Directory, sono tuttavia implicitamente "remoti", ovvero, nel computer client SA non è un server di posta elettronica o un controller di dominio e verrà un contatto come appropriato. Non è necessario effettivamente un - parametro computerName per i comandi che lavorare con queste tecnologie.

Ognuna delle quattro funzioni filiale gestisce una delle operazioni principali È strutturati nella prima parte di questa serie e ciascuna viene passato l'insieme completo di informazioni utente la variabile $ _. Pertanto esistono, viene eseguita il mio script provisioning!

Creazione di un utente

Solo scherzando. Ovviamente ancora necessario scrivere la funzionalità reale, che vive in queste quattro funzioni di filiale. In questo aggiornamento, è possibile illustrare la funzione CreateUser. La prima iterazione di questo codice presuppone che si disponga di Exchange Server 2007 nell'ambiente. (Spiacenti, questo non funziona per le versioni precedenti di Exchange Server.) Qualsiasi computer che si sta utilizzando per eseguire questo script deve disporre gli strumenti di gestione di Exchange Server installato e sarà necessario assicurarsi che lo snap-in di Exchange Server per Windows PowerShell viene caricato. Per controllare, eseguire PSSnapin Get e se è nell'elenco visualizzato. In caso contrario, eseguire registrato per assicurarsi di PSSnapin Get installata. Quindi, per caricare lo snap-in in della shell, eseguire questo:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin. 

Se si riceve avremmo di digitare questo comando, è possibile aggiungere allo script che contiene tutte le funzioni di provisioning oppure è possibile aggiungere è al profilo di Windows PowerShell per consentire l'carico quando si apre la shell. (Illustrato come creare profili personalizzati nella dispensa 2008 ottobre di questa colonna" La potenza di profili."

Ecco la struttura di base per la funzione:

Function CreateUser {
  Param($userinfo)
}

Si noti che HO incluso un blocco di parametro, che indica la shell i parametri che sono previsti. Quando richiama questa funzione, la tabella hash che è possibile passare verrà memorizzato automaticamente nella variabile $ userinfo.

Ecco un altro modo per scrivere questa:

Function CreateUser($userinfo) {
}

Questa sintassi ha esattamente lo stesso effetto. Tuttavia, la shell utilizza la prima versione internamente in modo che tendono a utilizzare tale versione corretta. RITENGO che anche mediante il blocco parametro semplifica la funzione lettura verso il basso fuori sede.

All'interno della funzione, È necessario eseguire un singolo comando: nuova cassetta postale. Questo fatto oltre creare una nuova cassetta postale; crea anche un nuovo utente in Active Directory. È necessario sapere un paio di parti di informazioni un front-end incluso il database delle cassette postali in cui desidera la cassetta postale da archiviare. La sintassi di base è simile al seguente (che è effettivamente tutti lunga e singola riga di comando):

New-Mailbox –UserPrincipalName don@concentratedtech.com 
  -alias DonJ 
  –database "Storage Group 1\Mailbox Database 1" 
  –name Don Jones 
  –organizationalUnit Users 
  –password $password 
  –FirstName Don 
  –LastName Jones 
  –DisplayName "Don Jones" 
  –ResetPasswordOnNextLogon $true

Si noterà che È necessario proporre con una password per il nuovo utente e decidere quali OU (unità organizzativa) per inserire l'utente in. In questo esempio, "utenti" sono tecnicamente un contenitore, non un'unità ORGANIZZATIVA, ma il comando accetta uno. Supponendo che la funzione ProvisionInputCSV è stato modificato per ottenere tutto ciò che È necessario, è previsto variabile $ userinfo per contenere le seguenti informazioni ­minimum:

  • UPN (nome principale utente)
  • Unità ORGANIZZATIVA (unità ORGANIZZATIVA di destinazione)
  • MailDatabase
  • givenName (nome)
  • Sn (cognome)
  • samAccountName (che verrà utilizzato come 'alias')

Che offre più la funzione riportata di seguito:

Function CreateUser {
  Param($userinfo)

New-Mailbox –UserPrincipalName $userinfo['upn'] 
  -alias $userinfo['samAccountName'] 
  –database $userinfo['mailboxDatabase'] 
  –name ($userinfo['givenName'] + ' ' + $userinfo['sn']) 
  –organizationalUnit $userinfo['ou'] 
  –password 'P@ssw0rd!' –FirstName ($userinfo['givenName'] 
  –LastName $userinfo['sn']) 
  –DisplayName ($userinfo['givenName'] + ' ' + $userinfo['sn']) 
  –ResetPasswordOnNextLogon $true
}

(Anche in questo caso, il comando deve essere una singola riga, ma È stato interrotto qui in modo da semplificare digest). Combinato con la funzioni Provision e ProvisionInputCSV, questa funzione creerà nuovi utenti e renderli abilitati all'utilizzo della cassetta postale.

Alcune operazioni interessanti sono notare qui:

  • Non nel comando viene fatta distinzione tra maiuscole e minuscole, anche se Active Directory mantiene le maiuscole e minuscole è utilizzare elementi quali i nomi.
  • Sono fornendo - parametri name e - displayName un'espressione come un valore. È necessario racchiudere l'espressione (parentesi) per verificare la shell valuta l'espressione e il parametro passa i risultati. Questa tecnica consente di utilizzare gli attributi givenName e sn per costruire un nome completo.
  • È stato codificato una password temporanea, anziché uno che compongono. Che compongono le password è necessario un modo per comunicare la password per gli utenti e che rientra nell'ambito di questa discussione.
  • Variabile $ true è incorporato nella shell e rappresenta il valore Boolean true (l'opposto di false.

Mancante Exchange?

Windows PowerShell non consentono la creazione di un utente abilitato all'utilizzo della cassetta postale se non si utilizza Exchange Server 2007. Tuttavia, è possibile creare l'account utente di base comunque in Active Directory. Per eseguire questa operazione, è necessario disporre libero cmdlet di Active Directory per Windows PowerShell, che sono disponibili in www.Quest.com/PowerShell. Installare quelli connessi tramite il computer in cui verrà essere in esecuzione lo script e aggiungere lo snap-in per la shell eseguendo questo:

Add-PSSnapin Quest.ActiveRoles.ADManagement 

Si noti che il nome di snap-in include il nome di un prodotto Quest esterno (ActiveRoles server), ma non è necessario tale prodotto in per poter utilizzare il cmdlet nello snap-in.

Si verrà utilizzare il comando QADUser nuovo, simile al seguente in esecuzione nella funzione CreateUser:

New-QADUser –samAccountName $userinfo['samAccountName'] 
  –parentContainer $userinfo['OU'] 
  –FirstName $userinfo['givenName'] 
  –LastName $userinfo['sn'] 
  –Name ($userinfo['givenName'] + ' ' + $userinfo['sn']) 
  –UserPrincipalName $userinfo['UPN'] 
  –displayName ($userinfo['givenName'] + ' ' + $userinfo['sn']) 
  –userPassword "P@ssw0rd!" | Enable-QADUser

Si noti che l'output di questo comando È stato reindirizzato, costituito dall'utente appena creato, a un secondo comando che consente l'account utente. È possibile decidere se questa struttura è appropriata per il proprio ambiente.

Il comando QADUser nuovo ha decine di parametri possono essere utilizzati per impostare altri attributi di Active Directory, ma è lasciare questo comando come - consiste nel rendere più parallelo con la versione di Exchange Server. È necessario inserire attributi aggiuntivi nell'ultima parte di questo script.

Opzioni di opzioni, opzioni

Anche se si esegue Exchange Server 2007, è comunque preferibile Utilizzo QADUser nuovo per creare gli account utente. In questo modo certamente consente una maggiore flessibilità, come questo comando è possibile gestire qualsiasi attributo di directory. E QADUser nuovo verrà lo script compatibili con qualsiasi ambiente indipendentemente dal fatto che Exchange Server 2007 è in uso.

Se si dispone di Exchange Server 2007, è possibile utilizzare una sintassi alternativa di cassette postali New Crea una cassetta postale e collegarlo all'account di Active Directory appena creato. Si scoprirà che in Windows PowerShell è in genere offre diversi modi diversi per eseguire un'operazione, l'approccio corretto è in genere quella ottimale per l'utente con la minima quantità di formazione coinvolti.

Prossimo mese, verrà fornita un po'ulteriormente questa funzione provisioning alla presenza che consente di creare le cartelle principali per gli utenti e applicare il diritto Access Control Lists (ACLs) a tali cartelle. Elenchi di controllo di accesso sono particolarmente difficile su cui lavorare e potrebbero essere sorpresi dalla tecnica che consente di ottenere il processo eseguito più facilmente di Windows PowerShell.

Don Jones è 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.