Che cos’è Desired State Configuration

Desired State Configuration (DSC) è la piattaforma dichiarativa di PowerShell per definire e mantenere la configurazione di un server. Invece di scrivere script imperativi che elencano i passi (“installa questa feature, avvia quel servizio”), con DSC descrivi lo stato desiderato — quali feature devono essere presenti, quali servizi in esecuzione, quali file o chiavi di registry esistere — e lasci al motore il compito di raggiungerlo e mantenerlo. L’approccio è idempotente: applicare la stessa configuration più volte non produce effetti collaterali, perché DSC agisce solo sulle differenze rispetto allo stato attuale.

Il concetto chiave da ricordare è la separazione fra descrizione e applicazione. La configuration scritta in linguaggio PowerShell viene compilata in un documento MOF (Managed Object Format), ed è il MOF — non lo script — che viene realmente applicato al nodo.

Scrivere e compilare una configuration

Una configuration si definisce con la keyword Configuration, che si comporta come una function. Al suo interno i blocchi Node indicano i server destinatari e contengono le risorse (resource) DSC: elementi come WindowsFeature, Service, File, Registry, ciascuno con le proprietà dello stato desiderato e la proprietà Ensure (Present / Absent).

Le risorse provengono da moduli DSC (per esempio PSDscResources); con Get-DscResource verifichi quali sono disponibili sul sistema. Per parametrizzare più server si usa il blocco ConfigurationData con la tabella AllNodes, evitando di duplicare una configuration per ogni host.

Invocando la configuration come una function si genera, per ciascun nodo, un file .mof in una cartella di output. Le credenziali incluse nel MOF vanno cifrate con certificati; il testo in chiaro è ammesso solo in laboratorio tramite PSDscAllowPlainTextPassword.

Applicare lo stato e gestire il drift

Start-DscConfiguration -Path <cartella-MOF> applica i MOF ai nodi tramite il Local Configuration Manager (LCM), l’agente presente su ogni server. Aggiungi -Wait -Verbose per eseguire in primo piano e vedere l’output dettagliato; senza -Wait il job parte in background.

L’LCM è il cuore del mantenimento dello stato e si configura separatamente con Set-DscLocalConfigurationManager. Le proprietà da conoscere:

  • RefreshMode: Push (spingi tu il MOF con Start-DscConfiguration) oppure Pull (il nodo scarica la configuration da un pull server).
  • ConfigurationMode: ApplyOnly (applica una volta sola), ApplyAndMonitor (default: applica e segnala il drift senza correggerlo), ApplyAndAutoCorrect (applica e ripristina automaticamente lo stato quando rileva scostamenti).
  • ConfigurationModeFrequencyMins: ogni quanto l’LCM riverifica lo stato (default 15 minuti).

Il drift è lo scostamento fra stato desiderato e stato reale. Per verificarlo senza applicare nulla usi Test-DscConfiguration (ritorna True/False); Get-DscConfiguration mostra lo stato corrente effettivo e Get-DscConfigurationStatus l’esito dell’ultima applicazione. Solo ApplyAndAutoCorrect corregge il drift da solo: con ApplyAndMonitor devi riapplicare manualmente.

DSC negli scenari ibridi

Per gestire flotte di server on-prem e Azure VM da un punto unico, Azure Automation State Configuration ha fornito storicamente un pull server gestito e reporting centralizzato della conformità. Nelle architetture più recenti Microsoft indirizza verso Azure Machine Configuration (ex guest configuration di Azure Policy), che sulle macchine non-Azure passa per Azure Arc. Per l’esame trattieni l’idea di fondo: pull server centralizzato più reporting per audit di conformità su larga scala. AZ-800 (passing score 700/1000) è in ritiro il 30 settembre 2026; verifica sempre la documentazione ufficiale per lo stato dei singoli servizi.

Trappole tipiche d’esame

  • “Applica” la configuration eseguendo lo script → soluzione: invocare la configuration genera solo il MOF; per applicarlo serve Start-DscConfiguration -Path. Compilazione e applicazione sono due passi distinti.
  • Il drift deve essere corretto automaticamente → soluzione: imposta ConfigurationMode = ApplyAndAutoCorrect. ApplyAndMonitor (default) rileva e segnala ma non ripara; ApplyOnly non ricontrolla nemmeno lo stato.
  • Solo verificare la conformità senza modificare nulla → soluzione: usa Test-DscConfiguration (True/False). Start-DscConfiguration applicherebbe le modifiche; Get-DscConfiguration legge lo stato reale ma non lo confronta col desiderato.
  • Cambiare push/pull o la frequenza di controllo → soluzione: sono proprietà dell’LCM, si impostano con Set-DscLocalConfigurationManager, non dentro la configuration delle risorse.
  • Molti server on-prem più Azure da un punto centrale → soluzione: RefreshMode = Pull con pull server (Azure Automation State Configuration / Machine Configuration via Arc), non push manuale nodo per nodo.
  • Credenziali nel MOF in chiaro in produzione → soluzione: cifrale con certificati; PSDscAllowPlainTextPassword = $true è solo per test/lab.