Il corso PowerShell avanzato: scripting, funzioni e moduli è rivolto agli amministratori di sistema e ai professionisti IT che conoscono già i fondamenti di PowerShell e desiderano sviluppare soluzioni di automazione strutturate, affidabili e riutilizzabili.
Il percorso approfondisce la progettazione di script complessi, la creazione di funzioni avanzate, la gestione degli errori, il debugging, l’elaborazione degli oggetti attraverso la pipeline e la realizzazione di moduli PowerShell destinati all’utilizzo individuale o alla distribuzione all’interno di un’organizzazione.
Particolare attenzione viene dedicata alla trasformazione di semplici sequenze di comandi in strumenti amministrativi professionali, dotati di parametri, controlli, messaggi diagnostici, documentazione e meccanismi di gestione delle eccezioni.
Le funzioni avanzate di PowerShell permettono infatti di creare comandi che si comportano in modo simile ai cmdlet compilati, utilizzando attributi come CmdletBinding, parametri comuni e blocchi di elaborazione begin, process, end e clean. I moduli consentono inoltre di organizzare, riutilizzare e distribuire il codice in unità autonome.
Il corso consente di passare dall’utilizzo operativo di PowerShell alla progettazione di veri strumenti di amministrazione.
Le competenze acquisite possono essere applicate a:
- amministrazione di Windows Server;
- Active Directory;
- Hyper-V;
- Microsoft Azure;
- Microsoft 365;
- Microsoft Entra ID;
- Microsoft Intune;
- gestione degli endpoint;
- monitoraggio delle infrastrutture;
- provisioning e configurazione;
- attività DevOps;
- reporting e controllo della conformità;
- automazione dei processi IT.
Il corso è rivolto a:
- amministratori di sistema Windows;
- sistemisti senior;
- amministratori di Windows Server;
- professionisti DevOps e Cloud Operations;
- tecnici responsabili dell’automazione delle attività IT;
- amministratori Microsoft 365 e Azure;
- professionisti che gestiscono infrastrutture ibride;
- sviluppatori di strumenti interni per l’amministrazione dei sistemi;
- operatori IT che utilizzano già PowerShell e desiderano passare dalla scrittura di comandi alla progettazione di strumenti strutturati.
Al termine del corso i partecipanti saranno in grado di:
- progettare script PowerShell complessi e facilmente manutenibili;
- organizzare il codice in funzioni e componenti riutilizzabili;
- creare funzioni avanzate con comportamento simile ai cmdlet;
- definire parametri obbligatori, facoltativi, posizionali e provenienti dalla pipeline;
- validare i valori ricevuti dai parametri;
- utilizzare correttamente i blocchi
begin, process, end e clean;
- gestire input, output e diversi stream di PowerShell;
- implementare una gestione strutturata degli errori;
- utilizzare
try, catch, finally, throw e le variabili di errore;
- diagnosticare problemi attraverso logging, tracing e debugging;
- costruire moduli PowerShell basati su file
.psm1;
- creare e configurare il manifesto di un modulo;
- controllare l’esportazione di funzioni, alias e variabili;
- documentare funzioni, script e moduli;
- applicare convenzioni e buone pratiche di sviluppo;
- predisporre script e moduli per l’utilizzo da parte di altri amministratori;
- realizzare una soluzione completa di automazione amministrativa.
1. Progettazione di script PowerShell strutturati
- Ripasso della struttura di uno script PowerShell.
- Differenza tra comando, script, funzione e modulo.
- Definizione degli obiettivi dello script.
- Separazione tra acquisizione dei dati, elaborazione e produzione dei risultati.
- Organizzazione del codice in sezioni logiche.
- Utilizzo delle regioni e dei commenti.
- Convenzioni di denominazione.
- Verbi approvati e nomenclatura
Verbo-Sostantivo.
- Gestione della configurazione esterna.
- Utilizzo di file JSON, CSV e XML.
- Separazione tra codice, dati e credenziali.
- Definizione di costanti e valori predefiniti.
- Scope delle variabili.
- Scope globale, locale, script e private.
- Utilizzo consapevole delle variabili automatiche.
- Dot sourcing e riutilizzo di file di funzioni.
- Limiti del dot sourcing e passaggio ai moduli.
2. Funzioni PowerShell
- Creazione e richiamo delle funzioni.
- Parametri formali e argomenti.
- Tipizzazione dei parametri.
- Valori predefiniti.
- Parametri obbligatori e facoltativi.
- Parametri posizionali.
- Switch parameter.
- Restituzione di oggetti.
- Differenza tra output e visualizzazione.
- Comportamento implicito dell’output.
- Utilizzo di
return.
- Scrittura di funzioni riutilizzabili.
- Utilizzo dei verbi approvati.
- Documentazione delle funzioni.
- Comment-based help.
- Definizione di synopsis, description, parameter, example e notes.
- Utilizzo di
Get-Help.
- Errori frequenti nella progettazione delle funzioni.
3. Funzioni avanzate e CmdletBinding
- Differenza tra funzioni semplici e funzioni avanzate.
- Utilizzo dell’attributo
[CmdletBinding()].
- Comportamento simile ai cmdlet compilati.
- Parametri comuni.
- Utilizzo di
-Verbose, -Debug, -ErrorAction e -WarningAction.
- Variabile automatica
$PSCmdlet.
- Blocco
param.
- Blocchi
begin, process, end e clean.
- Elaborazione iniziale e finale.
- Elaborazione ripetuta degli oggetti ricevuti dalla pipeline.
- Gestione e rilascio delle risorse.
- Utilizzo di
Write-Verbose.
- Utilizzo di
Write-Debug.
- Utilizzo di
Write-Warning.
- Utilizzo di
Write-Information.
- Utilizzo di
Write-Progress.
- Utilizzo di
Write-Error.
- Supporto a
ShouldProcess.
- Implementazione dei parametri
-WhatIf e -Confirm.
- Protezione delle operazioni potenzialmente distruttive.
Le funzioni avanzate mettono a disposizione i metodi e le proprietà della classe PSCmdlet, compresi ShouldProcess, ShouldContinue e i diversi metodi di scrittura dell’output diagnostico.
4. Parametri avanzati e validazione degli input
- Attributo
[Parameter()].
- Parametri obbligatori.
- Parametri posizionali.
- HelpMessage.
- Parameter set.
- Creazione di modalità operative alternative.
- Identificazione del parameter set utilizzato.
- Parametri ricevuti dalla pipeline.
ValueFromPipeline.
ValueFromPipelineByPropertyName.
- Alias dei parametri.
- Splatting.
- Passaggio di parametri attraverso hashtable.
- Validazione degli input.
ValidateSet.
ValidateRange.
ValidateLength.
ValidatePattern.
ValidateScript.
ValidateNotNull.
ValidateNotNullOrEmpty.
- Validazioni personalizzate.
- Conversione dei tipi.
- Gestione di date, numeri, stringhe e valori enumerati.
- Parametri dinamici: concetti e scenari di utilizzo.
5. Pipeline e gestione avanzata degli oggetti
- Funzionamento della pipeline di PowerShell.
- Pipeline by value.
- Pipeline by property name.
- Binding dei parametri.
- Elaborazione degli oggetti nel blocco
process.
- Creazione di oggetti personalizzati.
- Utilizzo di
[PSCustomObject].
- Proprietà calcolate.
- Aggiunta di proprietà e metodi.
- Utilizzo di
Select-Object.
- Utilizzo di
ForEach-Object.
- Filtri efficienti.
- Ordinamento, raggruppamento e aggregazione.
- Creazione di output coerenti e prevedibili.
- Evitare output indesiderati.
- Differenza tra dati e formattazione.
- Perché non utilizzare i cmdlet
Format-* all’interno delle funzioni.
- Esportazione dei risultati in CSV, JSON e XML.
- Serializzazione e deserializzazione.
- Gestione di grandi quantità di oggetti.
- Cenni sulle prestazioni della pipeline.
6. Gestione avanzata degli errori
- Errori terminanti e non terminanti.
- Comportamento predefinito degli errori.
- Variabile
$Error.
- Variabile
$ErrorActionPreference.
- Parametro
-ErrorAction.
- Utilizzo di
try, catch e finally.
- Gestione di eccezioni specifiche.
- Catch multipli.
- Utilizzo di
throw.
- Generazione di errori terminanti.
- Utilizzo di
Write-Error.
- Accesso alle informazioni dell’eccezione.
- Analisi dell’oggetto ErrorRecord.
- Utilizzo di
Get-Error.
- Pulizia delle risorse nel blocco
finally.
- Progettazione di messaggi di errore comprensibili.
- Propagazione e intercettazione degli errori.
- Strategie di recovery e retry.
- Registrazione degli errori nei file di log.
- Gestione degli errori nelle funzioni e nei moduli.
PowerShell distingue differenti categorie di errori, che richiedono comportamenti e tecniche di gestione diversi. I blocchi try, catch e finally permettono di intercettare e gestire gli errori terminanti e di liberare correttamente le risorse utilizzate.
7. Logging, tracing e debugging
- Differenza tra messaggi operativi, diagnostici e di errore.
- Utilizzo degli stream di PowerShell.
- Progettazione di un sistema di logging.
- Registrazione di data, ora, livello e origine del messaggio.
- Log su file di testo.
- Log strutturati in formato CSV o JSON.
- Rotazione e archiviazione dei log.
- Utilizzo di
Start-Transcript e Stop-Transcript.
- Utilizzo di
Write-Verbose e Write-Debug.
- Debugging con Visual Studio Code.
- Breakpoint su righe, comandi e variabili.
- Utilizzo di
Set-PSBreakpoint.
- Step Into, Step Over e Step Out.
- Analisi dello stato delle variabili.
- Call stack.
- Debugging di script e funzioni.
- Identificazione degli errori logici.
- Tecniche per la diagnosi dei problemi di prestazioni.
- Utilizzo di
Measure-Command.
- Introduzione all’analisi statica del codice.
Il debugger PowerShell consente di sospendere ed esaminare l’esecuzione di script, funzioni, comandi ed espressioni per identificare errori e inefficienze.
8. Creazione di moduli PowerShell
- Finalità e vantaggi dei moduli.
- Differenza tra script, script module, manifest module e binary module.
- Struttura delle cartelle di un modulo.
- Variabile
$env:PSModulePath.
- Creazione di un file
.psm1.
- Inserimento delle funzioni in un modulo.
- Importazione del modulo.
- Rimozione e aggiornamento del modulo.
- Esportazione controllata delle funzioni.
Export-ModuleMember.
- Funzioni pubbliche e funzioni private.
- Separazione dei file sorgente.
- Caricamento delle funzioni private e pubbliche.
- Creazione di un manifesto
.psd1.
- Utilizzo di
New-ModuleManifest.
- Proprietà principali del manifesto.
- Nome, autore, descrizione e versione.
- RequiredModules.
- CompatiblePSEditions.
- PowerShellVersion.
- FunctionsToExport.
- CmdletsToExport.
- AliasesToExport.
- PrivateData.
- Versionamento dei moduli.
- Dipendenze tra moduli.
- Importazione automatica dei moduli.
- Controllo e aggiornamento delle versioni.
I moduli PowerShell permettono di organizzare il codice in unità autonome, semplificandone il caricamento, il riutilizzo, la manutenzione e la condivisione. Un modulo di script utilizza normalmente un file .psm1, eventualmente accompagnato da un manifesto .psd1.
9. Distribuzione, qualità e manutenzione del codice
- Convenzioni per la struttura dei progetti PowerShell.
- Separazione tra codice pubblico e privato.
- Gestione delle dipendenze.
- Versionamento semantico.
- Controllo delle versioni con Git.
- Creazione di repository interni.
- PowerShell Gallery: caratteristiche e utilizzo.
- Ricerca e installazione dei moduli.
- Pubblicazione di moduli in repository pubblici o privati.
- Firma digitale degli script.
- Execution Policy e relativi limiti.
- Utilizzo sicuro di moduli provenienti da terze parti.
- Verifica dell’origine e dell’affidabilità del codice.
- Compatibilità tra Windows PowerShell 5.1 e PowerShell 7.
- Gestione delle differenze tra sistemi operativi.
- Scrittura di codice portabile.
- Introduzione a PSScriptAnalyzer.
- Analisi delle regole e delle segnalazioni.
- Miglioramento della leggibilità e manutenibilità.
- Introduzione ai test automatici con Pester.
- Definizione di test di base per funzioni e moduli.
La PowerShell Gallery costituisce il repository centrale per script, moduli e risorse PowerShell; nelle organizzazioni è comunque possibile utilizzare repository privati per controllare la distribuzione dei componenti interni.
10. Introduzione alle classi PowerShell
- Differenza tra funzioni, oggetti personalizzati e classi.
- Dichiarazione di una classe.
- Proprietà.
- Metodi.
- Costruttori.
- Istanze.
- Tipizzazione degli oggetti.
- Enumerazioni.
- Utilizzo delle classi all’interno dei moduli.
- Scenari nei quali utilizzare una classe.
- Limiti e considerazioni progettuali.
PowerShell supporta una sintassi formale per la definizione di classi e tipi personalizzati, utile quando le soluzioni di automazione richiedono modelli di dati più strutturati.
- Il corso si svolgerà in modalità online live streaming, con il docente che terrà le lezioni in diretta.
- I partecipanti dovranno avere a disposizione un Personal Computer e preferibilmente un secondo schermo.
- Saranno forniti labs online che vengono messi a disposizione anche dopo la fine del corso per 3 mesi.
- Al termine del corso, coloro che avranno partecipato ad almeno l'80% delle lezioni riceveranno un attestato di frequenza.
Per partecipare efficacemente è necessario:
- conoscere la sintassi fondamentale di PowerShell;
- saper utilizzare cmdlet, variabili, operatori e pipeline;
- conoscere array, hashtable e oggetti PowerShell;
- saper utilizzare strutture condizionali e cicli;
- avere esperienza nella scrittura di semplici script
.ps1;
- possedere conoscenze generali di amministrazione dei sistemi Windows.
È consigliata la frequenza preventiva del corso PowerShell per amministratori di sistema o il possesso di competenze equivalenti.