Condividi tramite


Windows PowerShell

Trucchi interessanti sulle pipeline, Redux

Don Jones

 

Il mese scorso, ho illustrato è un trucco pipeline grande si avvale di associazione dei parametri della pipeline per trasformare un'attività piuttosto complessa in una semplice riga di Windows PowerShell.

Ecco una veloce ricapitolazione: Ho creato un file con valori delimitati da virgole (CSV) contenente informazioni sui nuovi utenti è stato necessario creare in un dominio di Active Directory. Dopo aver apportato certi che le intestazioni di colonna del file CSV corrispondono i nomi dei parametri di Nuovo ADUser cmdlet (che viene fornito con Windows Server 2008 R2 e può essere utilizzato con i domini di Windows Server 2003). In modo che le intestazioni di colonna sono stati elementi quali “ reparto, ” “ città, ” “ nome ” “ GivenName ” “ cognome, ” e così via. Poiché Nuovo ADUser binding pipeline input tramite il nome della proprietà, i nomi di colonna selezionando Consenti la creazione gli utenti con solo due cmdlet:

Importazione CSV c:\new-users.csv | nuovo ADUser

The Importazione CSV cmdlet restituisce un oggetto per ogni riga del file CSV e tali oggetti hanno proprietà che corrispondono ai nomi di colonna CSV. Poiché il file CSV contenuti therequiredparameters tutti of Nuovo ADUser Non è stato necessario specificare manualmente i parametri, nel caso sarebbe stato specificato i parametri non nel file sarebbe valido per ogni nuovo utente, ovvero un'organizzazione, ad esempio:

Importazione CSV c:\new-users.csv | nuovo ADUser –organization "OurCompany"

Penso che in questo esempio evidenzia realmente la potenza di Windows PowerShell: In giorni VBScript, questa operazione avrebbe richiesto uno script su più righe (e potessi in questo modo in Windows PowerShell, troppo). Ma prendendo tempo per comprendere il funzionamento della pipeline e con l'assistenza di un paio di cmdlet ben scritto, questo script “ ” diventa un paio di semplici comandi.

Quindi, qual è il problema?

Un paio di lettori astuti registrato domande sul mio sito Web all'indirizzo www.ConcentratedTech.com, scegliendo il trucco interessante che funzionava solo se colonna del file nomi esattamente corrispondono ai nomi di parametro in Nuovo ADUser. Se il file consiste nella creazione di un amministratore, è possibile probabilmente affidarsi tale corrispondenza esatta, se il file proviene da una persona in risorse umane, i nomi di colonna sono più probabile che aspetti quali “ nome cognome, ” “, ” e così via, non la corrispondenza esatta è necessario per Nuovo ADUser tali proprietà vengono automaticamente associati ai relativi parametri.

Ovviamente, si può sempre sufficiente modificare qualsiasi file o un database personale ti ha inviato il personale, ma non è tale tipo di drudgery esattamente per questo motivo abbiamo inventato computer? Windows PowerShell, offre, ovviamente, una correzione per la proprietà “ ridenominazione ” semplice e veloce: The Selezione oggetti cmdlet.

Selezione oggetti è uno di questi cmdlet che può essere un po' difficile imparare a utilizzare, perché esegue automaticamente buona. Ad esempio, una delle relative attività primario è semplificare gli oggetti, eliminando le proprietà si Don ’t necessario al momento. Specificare semplicemente le proprietà scopo desidera e il cmdlet output sarà un oggetto tagliato verso il basso. Ciò può risultare utile per rendere Visualizza output e i file di testo un po' più chiaro, ad esempio:

Get WmiObject Win32_OperatingSystem | Select-Object BuildNumber, ServicePackMajorVersion

Un altro utilizzo di Selezione oggetti è per selezionare un sottoinsieme degli oggetti della pipeline, utilizzando –First or –Last parametri:

Process Get | Sort VM –desc | seleziona –first 10

Si noti che ho si passa al alias Selezionare anziché il nome completo del cmdlet.

Ecco la soluzione

Un'altra funzionalità di spesso trascuratoSelezione oggetti è la possibilità di selezionare non solo le proprietà desiderate, ma di rinominarli. Se mai aver letto la Guida completa per il cmdlet (Guida in linea selezionare –full, ovvero un elemento è assolutamente consigliabile eseguire con ogni cmdlet), aver verrà individuato questa funzionalità e vedere anche esempi di come utilizzarlo. Ecco un esempio:

Importazione CSV c:\new-users.csv | seleziona {Name = "Cognome" Expression = {$ _ ".Cognome"}}

Se il file input include una colonna “ Cognome ”, questo verrà rinominato per “ cognome ”, consentendo la proprietà output in modo che corrisponda al nome del parametro di Nuovo ADUser. Ciò che ho fatto viene creato un tabella hash, un acronimodizionario or matrice associativa. Il simbolo @ è un operatore di matrice in Windows PowerShell, la tabella hash è una matrice è costituito da coppie chiave / valore. In questo caso, la chiave è il nome della proprietà che si desidera creare e il valore è il contenuto che si desidera assegnare a tale proprietà. All'interno della parte di espressione di tabella hash, è possibile utilizzare la variabile $ _ per fare riferimento all'oggetto pipeline corrente, ovvero in questo esempio, ho recuperato la proprietà “ Cognome ” (È stato necessario utilizzare le virgolette per racchiudere il nome della proprietà perché il nome della proprietà contiene uno spazio).

È possibile inviare come molti di questi come se si desidera Selezione oggetti:

Importazione CSV c:\new-users.csv | seleziona {Name = "Cognome" Expression = {$ _ ".Cognome Nome"}}, @ {Name ="GivenName"Expression = {$ _".Nome"}}

Il catch è di Selezione oggetti will solo output esattamente ciò che è indicare , in modo non appena possibile sapere per rinominare una o due colonne e fare in modo che i due più tutti gli elementi di output non è stato necessario rinominare. In genere è necessario specificare ogni proprietà da output al cmdlet successivo. Naturalmente, se si Don ’t necessario rinominare tutte le colonne dal file CSV, è possibile elencare solo li è:

Importazione CSV c:\new-users.csv | seleziona {Name = "Cognome" Expression = {$ _ ".Cognome Nome"}}, @ {Name ="GivenName"Expression = {$ _".Nome"}},Nome di reparto, organizzazione,

In questo caso, “ reparto ” “ Organization ” e “ nome ” verrebbe passato lungo senza vengano rinominati, che va bene, ovvero corrispondono esattamente i parametri associati di Nuovo ADUser.

Potrebbe sembrare più complesso se si dispone di numerose colonne per specificare, in modo da qui è una scelta rapida:

Importazione CSV c:\new-users.csv | seleziona @ {Nome = "Cognome" Expression = {$ _ ".Cognome Nome"}}, @ {Nome = "GivenName" Expression = {$ _ ".Nome"}},*

Il “ * ” memorizzeranno tutti i delle proprietà dall'oggetto di input, oltre a “ Cognome ” “ GivenName ” proprietà e che ho creato. Pronunciare quindi let’s che dispone di un file CSV è simile al seguente:

Nome, cognome, reparto, nome
Don, Jones, IT, DonJ
Greg Shields Janitorial, GregS
Jeff, Hicks, IT, JeffH

È quindi possibile utilizzare questi due cmdlet:

Importazione CSV c:\new-users.csv | seleziona {Name = "Cognome" Expression = {$ _ ".Cognome Nome"}}, @ {Name ="GivenName"Expression = {$ _".Nome"}},*

E gli oggetti output ognuna avrà sei proprietà: “ First Name, nome ” “ cognome, ” “ reparto ” “ ” “ cognome ” e “ GivenName. ” In altre parole, tutte le proprietà originali, più le aggiunte. Quindi sufficiente aggiungere in Nuovo ADUser cmdlet:

Importazione CSV c:\new-users.csv | seleziona {Name = "Cognome" Expression = {$ _ ".Cognome Nome"}}, @ {Name ="GivenName"Expression = {$ _".Nome"}},* | Nuovo ADUser

The Nuovo ADUser cmdlet non saranno in grado di eseguire qualsiasi operazione con le proprietà “ nome ” e “ cognome ” dopo quelli Don ’t corrispondono a uno dei relativi parametri. Che è possibile, ovvero il cmdlet ignorerà semplicemente non è possibile associare qualsiasi proprietà. Verrà, tuttavia, associare le altre quattro — “ cognome ” “ GivenName ” “ reparto, ” e “ nome ” in questo caso e creare nuovi account utente per me.

Modifica dell'approccio mentale

Ritengo che una delle maggiori sfide in utilizzo di Windows PowerShell è mai rinunciare. In altre parole, se non è possibile utilizzare un file CSV fornito solo perché i nomi di colonna non corrispondono ai requisiti, non presupporre che la risposta sia per modificare il file! Windows PowerShell quasi sempre possibile eseguire le informazioni necessarie, ovvero con un'indagine solo una piccola parte dell'utente.

Così le sfide Sticky Notes dispone di eseguire in Windows PowerShell? Piacerebbe sapere e per creare magari un prossimo articolo sulla base della risposta! Inviare domande all'indirizzo www.ConcentratedTech.com, dove sarà in grado di rispondere immediatamente in linea, raccogliere dettagli aggiuntivi da parte dell'utente e, se possibile, creare un articolo futuro per Microsoft TechNet Magazine.

Don Jones is uno il paese del più esperti istruttori Windows PowerShell e writer. Suggerimenti settimanale Windows PowerShell ha blog all'indirizzo ConcentratedTech.com; Inoltre, è possibile contattarlo o lui porre domande vi.

Contenuto correlato