Nel linguaggio di scripting Microsoft PowerShell, i cmdlets sono usati per eseguire tre operazioni: raccogliere informazioni, impostare informazioni ed eliminare informazioni. Oltre alle cmdlets, PowerShell fornisce anche la capacità di elaborare le informazioni più di una volta. Ci sono due funzioni PowerShell integrate che la maggior parte degli amministratori PowerShell utilizza. Sono ForEach Loop e ForEach-Object. Il ciclo ForEach di PowerShell consente di iterare attraverso un insieme di elementi raccolti in una variabile PowerShell. Ad esempio, utilizzando il cmdlet Get-ADUser PowerShell è possibile raccogliere informazioni sugli utenti da Active Directory. Se hai bisogno di guardare la proprietà della città di ogni utente prima di intraprendere un’azione, potresti usare ForEach Loop. Il ForEach-Object può essere usato per lavorare direttamente con gli oggetti e per lo più utilizzato in una pipeline come spiegheremo in questo articolo. Diamo un’occhiata ad alcuni esempi in cui vengono utilizzate le funzioni ForEach Loop e ForEach-Object.
PowerShell ForEach Loop
Il nostro primo esempio di utilizzo di ForEach Loop è quello di controllare la proprietà city degli utenti di Active Directory e poi compiere un’azione. Supponiamo di voler esportare gli utenti la cui proprietà città è impostata su “Londra” e poi salvare il risultato in un file CSV. Ecco lo script PowerShell:
Come potete vedere nello script qui sopra, abbiamo creato una variabile chiamata $CityReport che memorizza il percorso del file CSV dove verrà salvato il report. Poi, stiamo raccogliendo tutti gli utenti da una specifica unità organizzativa e memorizzando gli utenti raccolti con tutte le proprietà nella variabile $AllUsersNow. Successivamente, inizia l’elaborazione ForEach Loop. Nella funzione ForEach Loop stiamo controllando la proprietà city dell’utente e poi usando una condizione IF, stiamo controllando se la proprietà city contiene il valore “London” o no per l’utente corrente. Se l’utente ha “London” come valore nella proprietà city, i valori attuali del nome utente e della città vengono aggiunti al file C:Temp\CityReport.CSV.
Un altro esempio di utilizzo di ForEach Loop è quello di elaborare informazioni memorizzate in un file CSV. Supponiamo che tu abbia un file CSV che contiene valori di nome utente, città e dipartimento. Volete modificare le proprietà della città e del dipartimento dell’utente dal file CSV. Per farlo, userete lo script PowerShell qui sotto:
Come potete vedere nello script qui sopra, abbiamo importato il contenuto del file CSV nella variabile $CSVFile e poi usando il ciclo ForEach stiamo memorizzando i valori di dipartimento e città dal file CSV nelle variabili $NewDepartment e $NewCity e poi usando il cmdlet Set-ADUser PowerShell stiamo aggiornando i valori di dipartimento e città dell’utente.
In poche parole, usa PowerShell ForEach Loop quando hai bisogno di elaborare informazioni più di una volta, se hai bisogno di intraprendere un’azione su un elemento specifico in base al valore della proprietà dell’elemento, e/o quando hai bisogno di modificare le informazioni dell’oggetto da un file.
Oltre alla funzione ForEach Loop, PowerShell offre anche ForEach-Object. ForEach-Object, come suggerisce il nome, lavora direttamente con gli oggetti e viene utilizzato principalmente in una pipeline. Per esempio, come puoi vedere nel comando qui sotto, il cmdlet Get-Process recupera tutti i processi sul computer locale e ForEach-Object dopo la pipeline (|) elabora gli oggetti (nomi dei processi), e poi visualizza solo il nome del processo nella finestra di output.
Get-Process | ForEach-Object {$_.ProcessName}
Similmente, se hai bisogno di vedere il nome del processo insieme all’ID del processo, eseguirai questo comando:
Get-Process | ForEach-Object {$_.ProcessName, $_.ID}
Un altro esempio di utilizzo di ForEach-Object è per ottenere la lunghezza di tutti i file in una directory. Supponiamo che tu voglia controllare la lunghezza di tutti i file nella cartella C:Temp. Eseguirete questi comandi:
$ThisDir = “C:\Temp”
Get-ChildItem $ThisDir | ForEach-Object -Process {if (!$_.PSIsContainer) {$_.Name; $_.Length / 1024; ” ” }}
Nell’esempio PowerShell ForEach-Object qui sotto, stai raccogliendo eventi dall’Application Event Log e poi salvando il messaggio dell’evento in un file di testo.
Prendi da qui
Ora hai un’idea di come usare le funzioni PowerShell integrate ForEach e ForEach-Object. Il ciclo ForEach di PowerShell può essere usato per iterare attraverso un insieme di elementi raccolti in una variabile PowerShell e memorizzati in un file CSV. La funzione ForEach-Object può essere usata per lavorare direttamente con gli oggetti. Gli esempi che abbiamo fornito utilizzando entrambe le funzioni ForEach Loop e ForEach-Object in questo articolo dovrebbero farti iniziare e farti pensare a come utilizzare i comandi nel tuo lavoro.