Ogni volta che si reinstalla Windows 11 da zero arriva la parte più noiosa, ovvero ritrovare i programmi giusti, scaricarli uno alla volta, rimettere a posto le stesse impostazioni e ricostruire un ambiente di lavoro che fino al giorno prima funzionava perfettamente. È una procedura lenta, ripetitiva e soggetta ad errori, soprattutto quando le applicazioni sono decine e ognuna nasconde la sua piccola configurazione.
WinGet Configuration ti aiuta in tutto questo. Invece di installare una sfilza di programmi a mano, descrivi in un file di testo lo stato finale che vuoi ottenere, ovvero quali programmi installare e quali impostazioni di sistema attivare, e lasci che sia Windows a realizzarlo con un solo comando. Il file ha estensione .winget, si versiona come qualsiasi altro documento di codice e si può condividere senza problemi.
Sotto il cofano lavora PowerShell Desired State Configuration, la stessa tecnologia che gli amministratori di sistema usano da anni per tenere allineati interi gruppi di computer, ora resa comoda anche per chi ne gestisce uno solo. La funzione è integrata in winget, lo strumento da riga di comando che Microsoft include ormai di serie in Windows 11, ed è arrivata a piena maturità con le versioni più recenti. In questa guida vediamo come funziona, come scrivere il primo file passo dopo passo e, soprattutto, in quali situazioni conviene usarlo.
WinGet Configuration: più di una semplice lista di programmi
Per capire perché WinGet Configuration è interessante bisogna fare una distinzione importante. La maggior parte degli script di installazione lavora in modo imperativo, cioè gli dici esattamente cosa fare un passo alla volta e lui esegue gli ordini nell’ordine in cui li hai scritti. Un file .winget, invece, lavora in modo dichiarativo, perché non descrivi i passaggi ma il risultato.
In pratica tu dici “voglio che su questa macchina ci siano Git, Visual Studio Code e Node.js, con la modalità sviluppatore attiva“, e il sistema si occupa di capire come arrivarci. Chi ha già letto le nostre guide su uv per il tooling Python o su Mise-en-place per gli ambienti di sviluppo ritroverà la stessa filosofia, ovvero dichiari l’ambiente che vuoi e lo ricrei identico altrove.
Con questo approccio puoi lanciare lo stesso file dieci volte di fila senza combinare guai, perché prima di agire il sistema controlla cosa è già presente e tocca soltanto ciò che manca. Se Visual Studio Code è già installato, lo salta e passa oltre, senza reinstallarlo né rovinare nulla.
Forse ti stai chiedendo se winget non avesse già qualcosa di simile. In effetti esistono i comandi winget export e winget import, ma fanno una cosa sola, ovvero salvare e ripristinare la lista dei programmi installati in formato JSON. Niente impostazioni, niente ordine di esecuzione, niente controlli. Un file .winget va ben oltre, come mostra il confronto qui sotto.
| Funzione | import / export | configure |
|---|---|---|
| Installa pacchetti | Sì | Sì |
| Configura le impostazioni di Windows | No | Sì |
| Attiva la modalità sviluppatore | No | Sì |
| Imposta variabili d’ambiente | No | Sì |
| Definisce dipendenze tra i passi | No | Sì |
| Verifica i requisiti del sistema | No | Sì |
Si può dire che export è la lista della spesa e configure è la ricetta completa. La prima ti dice cosa comprare, la seconda ti dice cosa comprare e come sistemarlo.
WinGet Configuration: cosa serve per cominciare
I prerequisiti sono pochi: serve Windows 11 nella versione 22H2 o successiva, dove winget è già preinstallato come parte di App Installer, e se usi una versione più vecchia conviene aggiornarla. Per controllare di avere lo strumento e una versione recente, apri il Terminale e digita questo comando.
winget --versionAlla data di questa guida la versione stabile è la 1.28, che porta con sé l’integrazione con la più recente architettura Microsoft DSC. Se il comando non risponde, basta installare o aggiornare “Programma di installazione app” e riprovare.
Il secondo passaggio riguarda il motore che applica la configurazione. WinGet appoggia il comando configure su PowerShell Desired State Configuration, quindi conviene installare il modulo dedicato. Apri PowerShell come amministratore (clic destro sull’icona, poi “Esegui come amministratore”) e lancia il comando seguente.
Install-Module Microsoft.WinGet.DSC -ForceIl flag -Force evita le richieste di conferma e ti fa procedere senza interruzioni, così da arrivare pronto alla parte operativa. Da questo momento puoi scrivere ed eseguire i tuoi file. Un ultimo consiglio prima di andare avanti. Tieni il Terminale aperto come amministratore, perché molte voci di configurazione, come l’installazione di software a livello di sistema o la modifica di impostazioni di Windows, richiedono privilegi elevati.
Il primo file di configurazione
Adesso si passa alla pratica. Crea un file di testo e salvalo con estensione .winget, per esempio mio-setup.winget. Ecco una configurazione di base pensata per chi sviluppa sul web, ma che funziona altrettanto bene come punto di partenza per un PC tuttofare.
# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2
properties:
configurationVersion: 0.2.0
resources:
- resource: Microsoft.WinGet.DSC/WinGetPackage
directives:
description: Installa Git
securityContext: elevated
settings:
id: Git.Git
source: winget
- resource: Microsoft.WinGet.DSC/WinGetPackage
directives:
description: Installa Visual Studio Code
securityContext: elevated
settings:
id: Microsoft.VisualStudioCode
source: winget
- resource: Microsoft.WinGet.DSC/WinGetPackage
directives:
description: Installa Node.js LTS
securityContext: elevated
settings:
id: OpenJS.NodeJS.LTS
source: winget
- resource: Microsoft.WinGet.DSC/WinGetPackage
directives:
description: Installa PowerToys
settings:
id: Microsoft.PowerToys
source: winget
- resource: Microsoft.WinGet.DSC/WinGetPackage
directives:
description: Installa Windows Terminal
settings:
id: Microsoft.WindowsTerminal
source: winget
La prima riga commentata indica al tuo editor (per esempio Visual Studio Code) quale schema usare, in modo da segnalarti gli errori mentre scrivi. Sotto properties trovi configurationVersion, che fissa il formato del file, e resources, ovvero l’elenco delle cose da fare.
Ogni voce dell’elenco è una “risorsa”, e Microsoft.WinGet.DSC/WinGetPackage significa semplicemente “installa un pacchetto tramite winget”. Dentro directives metti la descrizione leggibile del passo e, dove serve, securityContext: elevated, che segnala la necessità di privilegi di amministratore. Infine, in settings, l’id è l’identificativo esatto del pacchetto e source: winget indica da dove prenderlo.
Se non conosci l’id di un programma, lo trovi al volo con una ricerca. Per esempio, per scoprire come si chiama il pacchetto di Mozilla Firefox ti basta questo.
winget search firefoxPrima di applicare la configurazione, prendi l’abitudine di validarla, perché il comando controlla la sintassi e ti avvisa se hai sbagliato un’indentazione, errore tipico di chi scrive YAML a mano.
winget configure validate -f mio-setup.winget
winget configure -f mio-setup.wingetWinGet ti chiederà una sola conferma di amministratore all’inizio, poi penserà a tutto. Se vuoi automatizzare del tutto, aggiungi --accept-configuration-agreements per saltare le richieste di conferma.
Impostazioni di sistema, controlli e dipendenze
Se WinGet Configuration si limitasse a installare programmi, sarebbe poco più di un comodo script. La parte interessante è che può configurare anche Windows stesso. Con le risorse giuste puoi attivare la modalità sviluppatore, attivare il tema scuro o sistemare impostazioni che altrimenti dovresti cercare a mano nei menu. Ecco un esempio che fa proprio questo e introduce anche un concetto nuovo.
properties:
configurationVersion: 0.2.0
assertions:
- resource: Microsoft.Windows.Developer/OsVersion
directives:
description: Richiede Windows 11 22H2 o successivo
allowPrerelease: true
settings:
MinVersion: '10.0.22621'
resources:
- resource: Microsoft.Windows.Settings/WindowsSettings
directives:
description: Attiva la modalità sviluppatore
allowPrerelease: true
securityContext: elevated
settings:
DeveloperMode: true
- resource: Microsoft.Windows.Developer/EnableDarkMode
directives:
description: Attiva il tema scuro
allowPrerelease: true
settings:
Ensure: Present
RestartExplorer: trueCon il blocco assertions Winget prima di toccare qualsiasi cosa il file verifica che certe condizioni siano vere. Nell’esempio controlla che la versione di Windows sia almeno la 22H2. Se la condizione non è soddisfatta, la configurazione si ferma subito con un messaggio chiaro.
C’è poi un’altra esigenza utile, ovvero l’ordine delle operazioni. A volte un passo dipende da un altro, perché non puoi aggiungere un componente a un programma che non hai ancora installato. In questi casi entra in gioco dependsOn, con cui dici a una voce di aspettare che un’altra sia completata.
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: vsPackage
directives:
description: Installa Visual Studio Community
securityContext: elevated
settings:
id: Microsoft.VisualStudio.Community
source: winget
- resource: Microsoft.VisualStudio.DSC/VSComponents
dependsOn:
- vsPackage
directives:
description: Aggiunge il workload .NET
allowPrerelease: true
securityContext: elevated
settings:
productId: Microsoft.VisualStudio.Product.Community
channelId: VisualStudio.18.Release
components:
- Microsoft.VisualStudio.Workload.ManagedDesktopQui l’etichetta id: vsPackage la decidi tu e la assegni al primo passo, mentre il secondo passo, grazie a dependsOn, parte solo quando il primo è andato a buon fine.
Clonare un PC esistente e l’editor visuale
Scrivere un file da capo non è l’unica strada. Se hai una macchina già configurata come piace a te, puoi farti generare la configurazione in automatico con il comando di esportazione. È comodissimo come backup prima di una formattazione o per replicare il tuo ambiente su un secondo computer.
# Esporta l'intera configurazione della macchina
winget configure export -o mia-macchina.winget --all
# Esporta solo la configurazione di un pacchetto specifico
winget configure export -o vscode.winget --package-id Microsoft.VisualStudioCodeL’export funziona bene con i programmi presenti nei repository di winget, ma tende a inciampare su tutto il resto, ovvero software installato manualmente, applicazioni distribuite fuori dallo store e strumenti di nicchia.
Non è raro ritrovarsi un file pieno di avvisi del tipo “pacchetto non disponibile da nessuna sorgente”, insieme a voci che non vorresti affatto replicare altrove, come driver o componenti legati a un hardware specifico. Quindi conviene trattare il risultato dell’export come una bozza da rileggere e ripulire, non come un backup di cui fidarti a occhi chiusi.
Se l’idea di combattere con l’indentazione dello YAML ti scoraggia, c’è una buona notizia. Microsoft ha rilasciato in versione sperimentale WinGet Studio, un editor visuale che ti permette di costruire e validare i file di configurazione con un‘interfaccia grafica, senza scrivere a mano una riga di codice.

C’è infine un uso che vale soprattutto per chi lavora in gruppo. Puoi mettere il file di configurazione direttamente dentro il repository di un progetto, nel percorso .config/configuration.winget. Quando un nuovo collega clona il progetto, gli basta lanciare winget configure -f .config/configuration.winget per ritrovarsi lo stesso ambiente di tutti gli altri.
Un tool per risparmiare tempo
Se reinstalli Windows spesso, perché provi build Insider, perché testi configurazioni o semplicemente perché ti piace ripartire pulito, WinGet Configuration ti rimette in piedi l’ambiente in pochi minuti mentri ti rilassi a prendere un caffè.
Lo stesso vale se gestisci più computer o se lavori in un team dove tutti dovrebbero partire dalla stessa base. Lo strumento è maturo ma non perfetto, dato che la documentazione ufficiale e i file generati non sempre usano la stessa versione di schema e l’export ha i limiti di cui abbiamo parlato.
Nonostante questo, l’idea di fondo è buona e alla portata di tutti, ovvero trattare la configurazione del proprio PC come si tratta il codice, versionata, ripetibile e condivisibile.













