Windows PowerShellAutomazione utente provisioning, parte 3

Don Jones

Contenuto

L'ambiente di esempio
Creazione della cartella
Assegnazione delle autorizzazioni

In questo aggiornamento di Windows PowerShell, è prelievo i punto in cui È stata interrotta ultimo mese e continuare a creare uno script che consente di effettuare il provisioning nuovi utenti in un ambiente Active Directory.Ancora la rata precedente non sono lettura, consiglia di leggere prima che la colonna prima di continuare in questo caso.

A questo punto, si dispone di un master provisioning funzione contiene quattro funzioni secondaria.La funzione principale è simile al seguente:

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

HO già creato variazioni della funzione CreateUser. In questo aggiornamento è con particolare attenzione sulla funzione CreateHomeFolder. Utilizzerà questa funzione per creare la cartella principale dell'utente e alle voci dell'elenco (ACL, Access Control List) di controllo di accesso appropriati.

Windows PowerShell domande e risposte su

D Windows PowerShell distinguere tra virgolette singole e doppie virgolette stringhe di caratteri?

A Sì. Con un'eccezione tutte tranne una, virgolette singole e doppie funzionano allo stesso modo. Entrambi questi comandi verrà, assegnare la stringa "Microsoft" alla variabile $ var:

$var = 'Microsoft'
$var = "Microsoft"

Tuttavia, in virgolette solo, la shell Cerca il carattere di segno di dollaro ($). Se si trova, la shell presuppone che i caratteri che segue il segno di dollaro sono un nome di variabile e verrà sostituire la variabile con contenuto di tale variabile:

$var1 = 'Windows'
$var2 = "Microsoft $var1"

Dopo l'esecuzione di questi due comandi, $var2 conterrebbe "Microsoft Windows" $var1 è stata sostituita con il relativo contenuto. Ottimale, a meno che non necessaria in modo esplicito questa funzionalità di sostituzione variabile osserva virgolette singole.

L'ambiente di esempio

Come tutte le funzioni figlio chiamate dalla funzione Provision, CreateHomeFolder accetta un hashtable come input. Poiché la creazione di una cartella principale solo realmente richiede la procedura di conoscere nome di accesso dell'utente, È possibile utilizzare la chiave di hashtable ['sAMAccountName']. Questa chiave È utilizzato nell'articolo del mese scorso, nonché, poiché l'attributo di samAccountName è obbligatorio quando si crea un nuovo account di utente Active Directory.

Inoltre necessario conoscere in cui verrà creata la cartella principale ed È necessario disporre di accesso alla rete in tale posizione. Per questo esempio, presupporrà che le cartelle principali utente siano tutti memorizzate in un server specifico in base al nome di accesso dell'utente. Ad esempio, tutti gli elementi a partire da A D è sul server HomeFolders1, mentre nelle cartelle E a H sono sulla HomeFolders2. Utilizzando questa struttura, mio esempio dovrebbe fornire una struttura che è possibile espandere al lavoro all'interno proprio ambiente. Per questa discussione non verrà per gli utenti il cui nome inizia con I e Z, sarà evidente il motivo e si desidera mantenere l'esempio semplice e risparmiare spazio.

In ambiente mio esempio, ognuno di questi server dispone di una condivisione amministrativa denominata $ abitazioni è rappresentato, che include tutte le cartelle principali di utente. E verrà si presuppone che gli amministratori possono creare nuove cartelle e che lo script è in esecuzione da un amministratore. Infine, verrà utilizzare tutti i server coinvolti sono nello stesso dominio oppure sono di attendibilità dei domini, in modo che sarà attendibile l'account amministratore che per eseguire lo script viene utilizzato il.

Creazione della cartella

Creazione della cartella è relativamente semplice. Innanzitutto, È necessario decidere quale server creerà la cartella in questo modo:

Function CreateHomeFolder {
  Param($userinfo)
  $server1 = 'a','b','c','d'
  $server2 = 'e','f','g','h'
  Switch ($userinfo['samAccountName'].    substring(0,1).tolower()) {
    { $server1 –contains $_ } 
      { $homeserver = '\\homeserver1\'; break; }
    { $server2 –contains $_ } 
      { $homeserver = '\\homeserver2\'; break; }
  }
}

Pertanto, cosa esattamente sta succedendo qui?

  • In primo luogo, è possibile creare una matrice di lettere che supporta ogni server della cartella principale. Per questo esempio È stato creati due matrici, $server1 e $server2 e le lettere è deciso che verranno assegnati host. Questo approccio semplifica le operazioni per me per modificare le assegnazioni di lettera in futuro, nonché per aggiungere ulteriori server se necessario.
  • È possibile utilizzare quindi il costrutto di opzione per valutare una serie di condizioni possibili. È possibile valutare il primo carattere di attributo samAccountName dell'utente, dopo aver convertito il carattere in caratteri minuscoli.
  • Per ogni server principale È necessario, È possibile aggiungere una condizione al costrutto cambia. La condizione di verifica se la prima lettera di samAccountName dell'utente (che è contenuto nella speciale $ _ variabile a questo punto) presente nella matrice del server di lettere. In caso affermativo, la variabile homeserver $ viene popolata con l'inizio di un percorso UNC (Universal Naming CONVENTION) per tale server. La parola chiave "break" impedisce ulteriori condizioni valutata dopo che HO trovato il server corretto. Si noti che, come scritti, in questo esempio verrà non funzionano per gli utenti i cui nomi iniziano con lettere si a Z, sarà necessario aggiungere condizioni per tale intervallo di lettere.

Successivamente, È semplicemente necessario Windows PowerShell, creare la cartella, in modo che la funzione ora è simile al seguente:

Function CreateHomeFolder {
  Param($userinfo)
  $server1 = 'a','b','c','d'
  $server2 = 'e','f','g','h'
  Switch ($userinfo['samAccountName'].
    substring(0,1).tolower()) {
    { $server1 –contains $_ } 
      { $homeserver = '\\homeserver1\'; break; }
    { $server2 –contains $_ } 
      { $homeserver = '\\homeserver2\'; break; }
  }
  Mkdir ($homeserver + '\$Homes\' + $userinfo['samAccountName'])
}

Il comando MkDir, che è effettivamente una funzione incorporata che utilizza il nuovo-Itemcmdlet, accetta i percorsi UNC. Così è combinando il nome corretto home directory del server con $ condivisione amministrativa abitazioni è rappresentato e samAccountName dell'utente. Se samAccountName l'utente è DonJ, MkDir creerà \\server1\$Homes\DonJ.

Assegnazione delle autorizzazioni

La nuova cartella verrà, per impostazione predefinita, ereditano le autorizzazioni di cartella padre. Così per questo esempio, presuppone che la cartella padre ha le autorizzazioni di base appropriati si desidera assegnare a qualsiasi nuova cartella principale di utente. Ad esempio, tale autorizzazione può assegnare controllo completo all'account System incorporato, nonché il gruppo Domain Admins o al gruppo Administrators locale, ma tale autorizzazione non sarebbe probabilmente includere tutti gli utenti. Sufficiente a questo punto è assicurarsi che il nuovo account utente disponga di autorizzazioni per la home directory che appena creata.

A questo punto, non visualizzare Scienziato ma È necessario dire che questo non è un'attività per il quale Windows PowerShell è attualmente well-suited. Conosce, sto errata. È sufficiente che autorizzazioni del file di Windows sono elementi poco terrifically complesse. Si dispone di un elenco di controllo di accesso (ACL, Access Control List) che contiene le voci di controllo di accesso (ACE). Ogni voce ACE combina un flag Consenti e Nega, autorizzazioni such as lettura o scrittura) e il GUID di un'entità di protezione (come un utente o un gruppo. Si tratta di numerose informazioni di lavorare insieme.

La shell offre cmdlet elenco di controllo di accesso get e set-elenco di controllo di accesso, ma è modificare un elenco di controllo di accesso necessario ottenere l'elenco di controllo di accesso, mess intorno a oggetti di Microsoft .NET Framework per modificare l'elenco di controllo di accesso e quindi eliminare l'ACL modificata nuovamente sul file o cartella. È un po'troppo basso livello per il tastes. È possibile utilizzare potenzialmente Strumentazione gestione Windows (WMI), ma che funzionerebbe in sostanzialmente allo stesso modo.

Fortunatamente, Microsoft ha incluso le numerose tale complessità in uno strumento utile, di facile utilizzo denominato cacls.exe, scommetto che si ha familiarità con, come è stato intorno a perpetua. Utilizzarlo sarà non solo salvare mi alcuni sforzi non necessari, ma verrà inoltre illustrare funzionamento di Windows PowerShell perfettamente anche con strumenti della riga di comando esterni (CACLS, ping, ipconfig e così via). Se si conosce già come utilizzare uno di questi strumenti, continuare a utilizzare in Windows PowerShell. Uno dei concetti più importanti con Windows PowerShell è che non è necessario riprogrammare tutto partendo da zero.

(BY modo so che cacls.exe è obsoleto. Solo è una sintassi leggermente più semplice di sostituzione ICacls.exe, in modo che STO utilizzando. È possibile modificare questa opzione per utilizzare se si desidera ICacls.exe.)

Passare dal file della Guida in linea per cacls.exe, ritengo che È necessario un comando simile al seguente:

cacls \\server1\homes\DonJ /e /g DOMAIN\DonJ:R
cacls \\server1\homes\DonJ /e /g DOMAIN\DonJ:W

Questo assegna autorizzazioni di lettura e scrittura nuovo utente, senza sovrascrivere altre autorizzazioni già nella cartella.

Tuttavia, un problema è che si desidera utilizzare variabili di questo comando, anziché valori statici. Inserire le variabili di shell nei comandi esterni può essere a volte difficile. Esistono diversi approcci, ma quello che desidera è creare la stringa di comando intero in una variabile di shell e quindi utilizzare cmd.exe per eseguire tale stringa. È simile al seguente:

$cacls1 = "cacls "+$homeserver+"$Homes\"
  +$userinfo['samAccountName']+" /E /G "
  +$user+":W"
$cacls2 = "cacls "+$homeserver+"$Homes\"
  +$userinfo['samAccountName']+" /E /G "
  +$user+":W"
cmd /c $cacls1
cmd /c $cacls2

Concessa, questo non può essere la cosa prettiest nel mondo, ma viene ottenuto il processo eseguito. Esegue inoltre il motive ulterior di strumenti consentono di illustrare come complessi esterni della riga di comando possono essere con parametri utilizzando variabili shell. È possibile eliminare queste quattro righe di codice nella funzione dopo il comando MkDir e la funzione è completa.

Tutto sono modificati per eseguire a questo punto consiste nel creare le ultime due funzioni nella principale funzione Provision: AddToGroups e UpdateAttributes. Illustreranno come eseguire che nella prossima puntata della colonna di Windows PowerShell.

Don Jones è un cofondatore di tecnologia Concentrated ( ConcentratedTech.com), dove ha blog settimanali sulle applicazioni di Windows PowerShell, SQL Server-V e altri argomenti. Contattarlo tramite il suo sito Web.