M365Con 2027 – conferenza online gratuita · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Guida completa all'automazione con PowerShell per Microsoft 365

By · · Updated

Scopri come usare PowerShell in Microsoft 365 per amministrazione, automazione, risoluzione dei problemi, reportistica, sicurezza e operazioni ripetibili.

Automatically translated with AI from the original post. Read the English original

Cover: Microsoft AI Agent Harness - Simply Explained

Questa guida ti fornisce tutto ciò che ti serve per prendere confidenza con PowerShell, che tu sia alle prime armi con gli script o che gestisca server da anni. Troverai passaggi chiari per installare PowerShell su qualsiasi sistema operativo, eseguire i primi comandi e capire il modo particolare in cui questa shell gestisce dati e automazione. Approfondirai lo scripting avanzato, le best practice di sicurezza e l'integrazione con i servizi cloud Microsoft come Azure e Microsoft 365. Lungo il percorso troverai suggerimenti tratti da casi reali, spunti dalla community e le novità sull'evoluzione di PowerShell verso il open source e il supporto multpiattaforma. Resta aggiornato e sicuro di te mentre padroneggi l'evoluzione di PowerShell e il suo ruolo nell'IT moderno.

Iniziare con PowerShell

Prima di iniziare a gestire sistemi o automatizzare attività, conviene installare PowerShell e prendere confidenza con il suo funzionamento. Questa sezione ti aiuta a installare PowerShell sul tuo computer, che tu usi Windows, Linux o macOS, e ti mostra come aprirlo ed eseguire i primi comandi. L'obiettivo è costruire una base solida, così sarai pronto per tutto ciò che verrà dopo. Nel frattempo noterai cosa rende PowerShell diverso dalle altre shell e come la sua sintassi chiara e prevedibile ti aiuti a ottenere buoni risultati. Vediamo subito quanto è facile iniziare.

Come installare PowerShell su Windows, Linux e macOS

Avvio di PowerShell ed esecuzione dei comandi di base

Versioni di PowerShell e storia dell'evoluzione

PowerShell ha attraversato una trasformazione importante nel corso degli anni. Nato come strumento esclusivo per Windows, è diventato una shell multpiattaforma che si trova a proprio agio tanto su Linux quanto sui server Windows. Questa sezione ti guida attraverso le tappe fondamentali di PowerShell, le differenze tra le versioni e ciò che ogni nuovo aggiornamento comporta per i tuoi script e il lavoro quotidiano. Scoprirai come scegliere consapevolmente la versione da usare, come mantenere sicurezza e compatibilità e cosa aspettarti quando passi da Windows PowerShell classico alle ultime release, come PowerShell 7.

Versioni di PowerShell e cronologia dei rilasci

Come aggiornare PowerShell e passare da Windows PowerShell a PowerShell 7

Concetti fondamentali di PowerShell: cmdlet, pipeline e sintassi

PowerShell non è come la tipica shell o il prompt dei comandi: sotto il cofano c'è una notevole potenza. Questa sezione esplora i mattoni fondamentali di PowerShell: cmdlet, pipeline e la sua sintassi leggibile. Capire questi concetti è fondamentale se vuoi automatizzare in modo efficiente, risolvere i problemi con sicurezza e sfruttare appieno le reali potenzialità di PowerShell. Una volta che avrai familiarità con la logica basata sugli oggetti e con i modelli prevedibili dei verbi di comando, scrivere script e gestire i sistemi diventerà un processo più fluido. Tutto ciò che segue costituisce una solida base per automazioni più complesse e scenari più avanzati.

Padroneggiare i cmdlet di PowerShell e la struttura dei comandi

I cmdlet di PowerShell sono comandi specializzati, creati con .NET e progettati per la gestione del sistema. A differenza dei comandi tradizionali delle shell, seguono una convenzione di denominazione Verbo-Sostantivo (ad esempio Get-Process o Set-Service). Questo rende chiaro che cosa fa ciascun comando, riduce le congetture e facilita la scoperta dei comandi disponibili.

I cmdlet accettano parametri con nome, che permettono un controllo preciso del loro comportamento. Ad esempio, Get-Process -Name "notepad" recupera le informazioni sul processo Blocco note. I parametri switch (flag) funzionano come interruttori on/off. Ogni cmdlet può accettare input dalla pipeline, producendo o consumando oggetti per ulteriori elaborazioni o filtri nei passaggi successivi.

A differenza dei comandi legacy che lavorano con testo semplice, i cmdlet operano su oggetti strutturati. Questo significa che l'output resta ricco e ordinato, rendendo più semplice ordinarlo, filtrarlo o passarlo da un comando all'altro. È un salto di qualità notevole nella gestione di automazioni complesse.

Puoi trovare i cmdlet disponibili con Get-Command oppure scoprire i dettagli specifici con Get-Help. I cmdlet sono il cuore della potenza amministrativa di PowerShell e permettono di eseguire qualsiasi operazione, dalle operazioni sui file alla gestione di Active Directory, con una sintassi coerente e chiara.

Comprendere la pipeline di PowerShell e l'elaborazione basata sugli oggetti

La pipeline di PowerShell è una funzionalità fondamentale che la distingue dalle shell tradizionali. In PowerShell i dati vengono trasferiti tra i comandi come oggetti, non solo come testo, tramite il carattere pipeline (|). Questo significa che puoi filtrare, ordinare e modificare dati ricchi lungo la pipeline senza perdere contesto o formattazione.

Ad esempio, Get-Process | Where-Object {$_.CPU -gt 100} prende l'output di Get-Process e mostra solo i processi con un utilizzo della CPU superiore a 100. Ogni passaggio lavora con oggetti .NET, consentendo manipolazioni avanzate e la selezione di proprietà specifiche.

Altre shell, come Bash o CMD, trasferiscono testo semplice attraverso le pipeline. Con gli oggetti, PowerShell consente un'ispezione e una manipolazione più approfondite, utili per attività IT che richiedono precisione e flessibilità. Questo modello permette inoltre di scrivere script chiari e concisi, soprattutto quando si gestiscono archivi di dati come il file system, il registro di sistema o API remote.

Questo approccio apre le porte all'automazione: puoi concatenare i comandi, trasformarne l'output o persino inviare dati a script e funzioni che scrivi tu. Quando ti abitui a ragionare in termini di oggetti e non solo di stringhe, le attività complesse diventano molto più gestibili.

Fondamenti di grammatica e sintassi di PowerShell

PowerShell utilizza una grammatica coerente e logica per ridurre gli errori e rendere gli script facili da leggere. I comandi seguono una struttura prevedibile: Verbo-Sostantivo [-Parametro1 valore1] [-Parametro2 valore2], che rende chiaro che cosa accade in ogni riga.

Le istruzioni in PowerShell non servono solo alla riga di comando; costituiscono anche le basi degli script. Utilizzerai variabili (come $myVar), operatori (-eq, -gt e così via) e costrutti di controllo semplici come if, foreach e switch per creare flussi logici.

PowerShell non distingue tra maiuscole e minuscole, quindi la scrittura è flessibile. I file di script usano l'estensione .ps1, e ogni riga può essere un'istruzione completa o parte di un blocco più ampio, con le parentesi graffe { } usate per raggruppare il codice.

La sua grammatica attinge sia dalle shell UNIX sia dallo scripting Windows, ma è progettata per essere chiara e facile da usare. Questo significa meno caratteri criptici, messaggi di errore più comprensibili e curve di apprendimento più brevi. Padroneggiare i fondamenti della grammatica aiuta a evitare i comuni intoppi nello scripting e consente di creare automazioni pulite e affidabili fin dall'inizio.

Scripting e automazione con PowerShell

Quando hai padroneggiato i comandi di base, lo scripting è il punto in cui inizi a moltiplicare i tuoi risultati. Questa sezione riguarda il modo di trasformare ciò che sai in qualcosa di ripetibile. Imparerai a organizzare l'automazione con gli script, a scrivere codice pulito in funzioni e moduli e a capire come lavorare con le variabili per soluzioni più dinamiche. Lungo il percorso vedrai quanto contano sicurezza, modularità e condivisione del codice: elementi essenziali sia se automatizzi solo la tua postazione di lavoro sia se costruisci strumenti per un'azienda. PowerShell scripting rende le attività di routine semplici e accelera anche la gestione di sistemi complessi.

Nozioni di base sugli script di PowerShell ed estensioni dei nomi file

Uno script di PowerShell è semplicemente un file di testo salvato con estensione .ps1. Questo segnala al sistema (e a te) che contiene comandi e logica di PowerShell. Gli script possono includere singoli comandi, funzioni riutilizzabili, rami logici, cicli e molto altro.

Per eseguire uno script devi tenere conto dei criteri di esecuzione, il modo in cui PowerShell controlla ciò che può essere eseguito per motivi di sicurezza. Per impostazione predefinita, in base al tuo criterio, possono essere eseguiti solo gli script firmati o quelli scritti localmente. Modifica il criterio con Set-ExecutionPolicy quando necessario, bilanciando comodità e sicurezza. Usa RemoteSigned o AllSigned per aumentare la sicurezza, soprattutto su sistemi condivisi o di produzione.

Esegui gli script dalla shell con .\script.ps1 (dalla directory corrente) oppure specifica il percorso completo. Presta molta attenzione ai percorsi e alle autorizzazioni: gli script nelle cartelle di sistema possono richiedere l'elevazione (privilegi di amministratore). Convalida e testa sempre i nuovi script prima di eseguirli in ambienti di produzione, per individuare subito eventuali errori.

Seguire le convenzioni per i nomi dei file e per l'esecuzione aiuta a mantenere un flusso di lavoro sicuro ed efficiente, e ti prepara ad affrontare in sicurezza automazioni più avanzate.

Codice PowerShell riutilizzabile: funzioni e moduli

Le funzioni in PowerShell consentono di raggruppare blocchi di codice per riutilizzarli, rendendo gli script più semplici e meno ripetitivi. Definisci una funzione con la parola chiave function e richiamala per nome in tutti i tuoi script. Le funzioni avanzate supportano parametri, input dalla pipeline e messaggi di guida dettagliati, portando struttura e chiarezza nei progetti di automazione più grandi.

I moduli sono raccolte di funzioni, cmdlet e altre risorse di PowerShell riunite per essere condivise e riutilizzate. Salva le funzioni in un file .psm1 e importale con Import-Module. Questo approccio è fondamentale quando si gestiscono codebase di grandi dimensioni o strumenti sviluppati dal team, perché permette a tutti di beneficiare di script testati e standardizzati.

I moduli possono essere pubblicati in PowerShell Gallery per l'uso pubblico oppure archiviati in repository locali. Questo facilita la condivisione del codice, il controllo delle versioni e la portabilità: niente più copia e incolla di funzioni tra un computer e l'altro. Usare funzioni e moduli è una best practice per mantenere gli script organizzati, manutenibili e più facili da aggiornare quando le esigenze cambiano.

In breve, il codice riutilizzabile è la spina dorsale di un'automazione scalabile, perché ti permette di scrivere una volta e usare ovunque.

Variabili, array e tabelle hash in PowerShell

Le variabili in PowerShell memorizzano dati per un uso successivo e si creano anteponendo il simbolo $ a un nome (ad esempio $userName). Possono contenere qualsiasi tipo di dato, tra cui stringhe, numeri, oggetti, array o persino strutture complesse. Le usi per rendere i tuoi script dinamici e adattabili.

Gli array raccolgono più valori in un'unica variabile e si creano con $myArray = 1, 2, 3. Puoi scorrere questi valori o accedervi tramite indice. Questo rende molto più semplice gestire elenchi di file, utenti o impostazioni.

Le tabelle hash sono coppie chiave-valore, paragonabili ai "dizionari", e si dichiarano con @{ Key1 = 'Value1'; Key2 = 'Value2' }. Sono ideali per memorizzare dati associati, come coppie nome utente/password o set di configurazione, e sono molto usate per oggetti personalizzati ed elaborazione dei dati.

Padroneggiare queste strutture dati è fondamentale per scrivere script potenti. Sarai in grado di raccogliere input dall'utente, elaborare file e organizzare le informazioni con facilità, aspetto essenziale quando si costruisce un'automazione che deve prendere decisioni o gestire grandi volumi di dati.

Best practice di sicurezza per PowerShell e tecniche di hardening

La sicurezza è al centro di qualsiasi implementazione seria di PowerShell. Questa sezione spiega come proteggere i sistemi e gli script da usi involontari o malevoli. Scoprirai come limitare l'esecuzione degli script, firmare il codice per garantirne l'attendibilità e monitorare le attività per individuare comportamenti sospetti. Imparare queste strategie aiuta a evitare che PowerShell diventi un vettore d'attacco, un aspetto cruciale per qualsiasi azienda, soprattutto con l'aumento dei rischi informatici. Rafforzare le difese fin da subito significa meno problemi in futuro e un'automazione più sicura e affidabile per tutti.

Protezione dell'esecuzione di PowerShell e firma degli script

I criteri di esecuzione stabiliscono quali script possono essere eseguiti sul sistema. PowerShell supporta diverse modalità: Restricted (nessuno script), RemoteSigned (gli script creati localmente vengono eseguiti, quelli remoti devono essere firmati), AllSigned (tutti gli script richiedono una firma) e Unrestricted (tutti gli script vengono eseguiti, con un avviso per quelli remoti). Imposta il criterio con Set-ExecutionPolicy. Negli ambienti aziendali, RemoteSigned o AllSigned offrono un buon equilibrio tra flessibilità e sicurezza.

La firma degli script garantisce che provengano da una fonte attendibile e che non siano stati manomessi. Usa un certificato di firma del codice, preferibilmente rilasciato da un'autorità di certificazione (CA) interna o esterna attendibile, per firmare gli script con Set-AuthenticodeSignature. Quando la firma di uno script non corrisponde, PowerShell mostra un avviso o blocca l'esecuzione, aggiungendo un livello di difesa fondamentale.

Tieni presente che i criteri di esecuzione sono definiti per utente e possono essere aggirati, quindi considerali come un solo livello della tua difesa. Verifica sempre l'attendibilità dell'editore, mantieni aggiornati i certificati di firma e rivedi periodicamente le impostazioni dei criteri su tutti i sistemi, usando i criteri di gruppo per l'applicazione a livello di organizzazione. Questi passaggi rendono molto più difficile per gli aggressori o per gli utenti non autorizzati introdurre automazioni dannose tramite PowerShell.

Implementando controlli rigorosi sull'esecuzione e firmando con attenzione gli script, riduci notevolmente il rischio e garantisci l'integrità degli script, un requisito essenziale nelle organizzazioni regolamentate o con esigenze di sicurezza elevate.

Constrained Language Mode e riduzione della superficie di attacco

Constrained Language Mode è una modalità operativa speciale di PowerShell che limita le funzionalità del linguaggio disponibili, rendendo molto più difficile usare PowerShell per scopi malevoli. Quando è attiva, limita l'accesso alle API .NET critiche, impedisce la chiamata di alcuni componenti nativi e restringe il codice dinamico, ed è ideale per scenari di lockdown o kiosk.

Questa modalità viene attivata automaticamente da soluzioni di sicurezza come Windows Defender Application Control (WDAC) o Device Guard, e può anche essere impostata tramite il registro di sistema in ambienti particolarmente rigidi. Consente l'automazione IT legittima, come i cmdlet di base e gli script standard, bloccando al tempo stesso le tecniche di sfruttamento che gli aggressori prediligono.

Ridurre la superficie di attacco di PowerShell significa anche mantenere installate solo le versioni aggiornate e necessarie, disabilitare il remoting se non serve e usare le regole di Application Control per limitare i file binari autorizzati a eseguire script. Combinare la constrained language mode con una policy di esecuzione rigorosa e script firmati è una potente strategia di difesa in profondità per rafforzare i sistemi aziendali.

Queste tecniche permettono di trovare un equilibrio: gli amministratori mantengono la potenza dell'automazione, mentre la stragrande maggioranza degli usi malevoli di PowerShell viene bloccata. Rivedi regolarmente le baseline di sicurezza e utilizza le ultime best practice di Microsoft per assicurarti che la configurazione corrisponda al tuo livello di rischio e alle tue esigenze operative.

Registrazione, monitoraggio e audit delle attività di PowerShell

L'ecosistema di PowerShell: strumenti, community e prospettive future

PowerShell è molto più di comandi e script: è un ecosistema in crescita, con strumenti pensati per ogni fase del tuo percorso di automazione. Questa sezione presenta ambienti di sviluppo più evoluti, introduce le principali community di PowerShell e analizza cosa ci riserva il futuro mentre PowerShell cresce nel cloud, nell'open source e nel mondo dell'automazione. Che tu cerchi strumenti migliori, consigli di esperti o occasioni per contribuire, troverai il modo di approfondire le tue competenze e di contribuire a plasmare il futuro di PowerShell, per te stesso e per l'intera community.

PowerShell Integrated Scripting Environment e alternative moderne

Community e governance di PowerShell

Il futuro di PowerShell: open source, multipiattaforma e integrazione con il cloud

L'evoluzione di PowerShell è segnata dal passaggio al open source. Oggi viene sviluppato su GitHub e distribuito con licenza MIT, il che permette alla community di correggere bug, creare nuove funzionalità e contribuire alla direzione della shell. Questo approccio collaborativo fa sì che PowerShell evolva rapidamente e con un supporto più ampio che in passato.

Il supporto cross-platform è uno dei punti di forza di PowerShell moderno. PowerShell 7 funziona su Windows, Linux e macOS, rendendo gli script e l'automazione portabili oltre i confini organizzativi. Gli amministratori e gli sviluppatori possono distribuire lo stesso stack di automazione nel data center, su VM cloud o in applicazioni containerizzate con modifiche minime.

L'integrazione con il cloud è un obiettivo prioritario per il futuro di PowerShell. Le estensioni per Azure, AWS e Google Cloud consentono di gestire le risorse e automatizzare l'infrastruttura cloud, portando l'«infrastructure as code» nelle attività quotidiane. PowerShell è ormai un linguaggio nativo in molte pipeline CI/CD e strumenti DevOps, a supporto di cicli di rilascio software rapidi e di una gestione dell'infrastruttura senza interruzioni.

La roadmap prevede un'automazione più profonda in Microsoft 365, controlli di sicurezza potenziati e script più intelligenti grazie a insight basati sull'AI. Per i professionisti IT, il percorso di PowerShell, aperto e orientato al cloud, ne garantisce il ruolo essenziale negli ambienti enterprise moderni.

Fondamenti di PowerShell e integrazione di sistema

Approfondire il background tecnico di PowerShell aiuta a capire perché funziona come funziona e come si integra praticamente con qualsiasi sistema. Questa sezione analizza l'approccio unico di PowerShell alla gestione degli oggetti, la sua storia e i principi guida, e i fondamenti della gestione della configurazione nell'IT moderno. Padroneggiare questi elementi significa script più efficaci, integrazioni migliori e piena sicurezza nel lavorare con sistemi Microsoft e di terze parti.

Extended Type System e modello a oggetti di PowerShell

L'Extended Type System (ETS) è il meccanismo con cui PowerShell estende il modello a oggetti standard di .NET. Grazie all'ETS, gli oggetti PowerShell possono avere proprietà e metodi aggiuntivi definiti a runtime, oltre a formattazione personalizzata e conversioni di tipo. Questa flessibilità permette a cmdlet e moduli di modellare l'output in base alle proprie esigenze, senza modificare il codice sorgente sottostante.

L'ETS consente di aggiungere al volo le «NoteProperty», ovvero campi dati personalizzati, così che i risultati possano essere arricchiti con valori calcolati o dinamici. I cmdlet Select-Object e Add-Member si basano sull'ETS per modificare gli oggetti mentre attraversano script o pipeline.

Il risultato? Un output coerente e utile, indipendentemente dal tipo di sistema o di origine dati che si automatizza, confronta o di cui si genera un report. L'ETS sostiene inoltre l'integrazione di PowerShell con archivi dati come Windows Management Instrumentation (WMI), Active Directory e API esterne.

Comprendere l'ETS permette di sviluppare script più avanzati. È possibile personalizzare ed elaborare i risultati in modi impossibili con il semplice output testuale, con un'automazione potente e affidabile che si adatta nel tempo a nuovi requisiti.

Background e filosofie di progettazione di PowerShell

PowerShell è stato ideato in Microsoft all'inizio degli anni 2000, guidato da Jeffrey Snover. L'obiettivo iniziale era offrire agli amministratori una shell unificata e profondamente integrata per gestire tutto l'ecosistema Windows – server, desktop e app – con un unico strumento coerente.

I principi guida di progettazione di PowerShell privilegiano un linguaggio chiaro e intenzionale, che punta su leggibilità e prevedibilità anziché su una sintassi criptica. Il formato Verbo-Sostantivo, il passaggio ricco di oggetti e il sistema di help facilmente consultabile sono stati tutti pensati con la leggibilità per l'uomo e un controllo preciso in mente.

La shell è nata sia come linguaggio di scripting sia come shell da comando, permettendo un uso interattivo e un'automazione robusta con gli stessi comandi. Il design di PowerShell si basa sui punti di forza delle shell Unix, integrandosi però in profondità in Windows tramite l'integrazione con .NET, WMI e le API di sistema.

In definitiva, la filosofia di PowerShell consiste nel consentire agli utenti di automatizzare, gestire e scalare l'infrastruttura IT senza dover ricorrere a infiniti strumenti specializzati. Questa visione guida ancora oggi l'evoluzione di PowerShell, soprattutto nella sua apertura verso open source, cross-platform e un futuro orientato al cloud.

Desired State Configuration per la gestione automatizzata

Desired State Configuration (DSC) è una funzionalità di PowerShell orientata alla gestione dichiarativa. Invece di scrivere script «come fare» per configurare un sistema, descrivi lo stato desiderato, come le funzionalità installate, i file presenti, le impostazioni del registro e lo stato dei servizi, e DSC applica questo stato e lo mantiene nel tempo.

DSC usa script di «configuration» che vengono compilati in file Management Object Format (MOF) e distribuiti o recuperati da server ed endpoint cloud. Questi file funzionano come piani di progetto e guidano la configurazione automatizzata di server, desktop, macchine virtuali cloud e dispositivi IoT.

Si integra strettamente con strumenti come System Center Configuration Manager (SCCM), Azure Automation e framework di terze parti, e questo lo rende un elemento chiave per una gestione dell'infrastruttura scalabile, verificabile e ripetibile. La capacità di DSC di monitorare e segnalare la conformità è particolarmente utile in ambienti regolamentati o ad alta sicurezza.

Per i team IT, DSC significa meno configurazioni «snowflake» e una gestione più prevedibile e automatizzata. Con il supporto multipiattaforma in crescita, DSC è un elemento centrale nel passaggio all'infrastructure as code, e aiuta gli amministratori a gestire in modo efficiente reti complesse, ibride e orientate al cloud.

Ottenere aiuto e padroneggiare le applicazioni di PowerShell

Non devi imparare PowerShell da solo né partire da zero. Questa sezione finale ti indica le migliori risorse di supporto e le community di apprendimento, e mostra come la potenza di PowerShell si estenda alla gestione di un'ampia gamma di applicazioni Microsoft e di terze parti. Che tu stia risolvendo problemi, migliorando o scalando, troverai supporto ed esempi pratici per ogni esigenza, così potrai padroneggiare sia la shell di base sia le sue numerose applicazioni reali.

Sistema di guida di PowerShell e risorse di apprendimento

Gestione di applicazioni e sistemi con PowerShell


Ascolta anche

Se stai studiando PowerShell per Microsoft 365, questi episodi aggiungono un contesto pratico su implementazione, architettura, sicurezza e governance:

.NET Automation Microsoft 365 Microsoft GitHub

Related articles

RSS