- DSC è un modello dichiarativo e idempotente: descrive lo stato e il motore converge ad esso.
- PSDSC utilizza MOF e LCM in Windows; L'attuale DSC è multipiattaforma e utilizza JSON/YAML.
- Si integra con Azure Automation, WinGet e altri strumenti per l'orchestrazione su larga scala.
- Migliori pratiche: modularizzazione, controllo delle versioni, test e allineamento con NIST/FISMA.
Se amministri sistemi Windows, Linux o macOS, prima o poi ti imbatterai nel concetto di stato desiderato. PowerShell La configurazione dello stato desiderato (DSC) è il modo più diretto per esprimere quello stato e mantenerlo in il tempo, evitando allarmi, correggendo deviazioni e accelerando le distribuzioni. Qui troverete un guida completa, con esempi pratici e le differenze tra il classico PowerShell DSC e il più recente DSC multipiattaforma.
Al di là delle definizioni formali, pensa a DSC come a una promessa che fai ai tuoi server: "Voglio che tu sia sistemato così e, se cambi, ti rimetterò al tuo posto."La parte migliore è che questa promessa è dichiarativa e idempotente: descrivi il risultato e il motore si occupa di arrivarci e di rimanerci, indipendentemente da quante volte esegui la stessa configurazione.
Che cos'è il DSC e perché potrebbe interessarti
DSC è una piattaforma di configurazione dichiarativa. Dichiarativo perché descrivi lo stato che desideri (servizi, ruoli e funzionalità attivi, pacchetti, file, chiavi di registro, ecc.), non la sequenza di passaggi laboriosi per ottenerlo. Il motore confronta lo stato attuale con quello desiderato e apporta modifiche minime per convergere.
La sua unità di base sono le risorse. Una risorsa DSC incapsula come "Ottenere", "Testare" e "Impostare" lo stato di qualcosa: un servizio, un file, Active Directory, SQL Server, ecc. Questa interfaccia Get/Test/Set consente di verificare se un nodo è già come dovrebbe essere e, in caso contrario, di applicare la modifica.
Nel classico PowerShell DSC (PSDSC), il componente di collegamento è Local Configuration Manager (LCM). LCM è il motore che applica le configurazioni, le monitora e può ripristinarle periodicamente.Funziona in modalità push (si invia la configurazione) o in modalità pull (il nodo la scarica da un Pull Server).
DSC è supportato da standard di gestione quali CIM e IMO. Questa base aperta facilita l'interoperabilità e consente agli strumenti di terze parti di coesistere senza attriti., un aspetto cruciale se la tua infrastruttura combina diversi produttori e piattaforme.
Differenze tra PowerShell DSC (PSDSC) e l'attuale DSC multipiattaforma
Negli ultimi anni, Microsoft ha promosso un DSC che va oltre PowerShell e Windows. Questo 'nuovo' DSC funziona su Windows, Linux e macOS e viene richiamato con lo strumento da riga di comando comandi DSC, senza affidarsi a PowerShell o al suo modulo PSDesiredStateConfiguration.
- Indipendenza da PowerShellL'attuale DSC non richiede PowerShell. Tuttavia, è possibile utilizzare le risorse PSDSC tramite adattatori:
Microsoft.DSC/PowerShellper le risorse nelle classi PowerShell eMicrosoft.Windows/WindowsPowerShellper coloro che si affidano a Windows PowerShell. - Formato del documentoIn PSDSC, le configurazioni vengono compilate in MOF. Nell'attuale DSC, i documenti di configurazione e gli schemi delle risorse sono definiti in JSON o YAML.
- Modello di esecuzione: PSDSC è dotato di LCM, che può essere eseguito come servizio e mantenere lo stato. Il DSC moderno viene richiamato come comando; non include il servizio LCM o residente.
- Multi lingua: puoi scrivere risorse in bash, Python, C#, Rust o qualsiasi altro linguaggio tu preferisca. L'attenzione è sulla piattaforma, non sulla shell.
- Integrazione: Il DSC multipiattaforma espone schemi JSON per integrarsi con WinGet, Microsoft Dev Box e Azure Machine Configuration, tra gli altri strumenti.
In breve, PSDSC rimane fondamentale su Windows e molto maturo per l'amministrazione del sistema operativo e dei ruoli. La piattaforma DSC multipiattaforma offre un percorso più ampio, più portabile e senza vincoli linguistici, ideale per le organizzazioni ibride..
Sistemi supportati e requisiti su Windows
L'implementazione classica di DSC su Windows è disponibile in modo nativo o tramite Windows Management Framework. Sono supportati Windows Server 2016, 2019 e 2022, oltre a Windows 10 e Windows 11Il pacchetto consigliato negli ambienti che non dispongono dell'ultima versione è WMF 5.1
C'è un'importante eccezione: Microsoft Hyper-V Server (prodotto autonomo) non include DSC, quindi non sarà possibile gestirlo con PSDSC o Azure Automation State Configuration.
Per operare in remoto, Windows deve avere WinRM configurato correttamente. Puoi abilitarlo con privilegi di amministratore eseguendo Set-WsManQuickConfig -ForceIn questo modo il computer viene preparato a ricevere comandi PowerShell remoti, anche se si applicano impostazioni su localhost.
Se è necessario effettuare una diagnosi, gli eventi DSC in Windows vengono registrati Microsoft-Windows-Dsc/OperationalPossono essere attivati i registri aggiuntivo per il debug avanzato quando è necessario approfondire.
Introduzione a PowerShell DSC su Windows
Di solito si inizia con le risorse integrate e si aggiungono moduli dalla PowerShell Gallery. Il modulo 'PSDscResources' offre risorse aggiornate per coprire scenari comuni.:
# Instalar recursos DSC desde PowerShell Gallery
Install-Module 'PSDscResources' -Verbose
Una configurazione PSDSC è definita con la parola chiave Configuration e compila in MOF. Di seguito è riportato un esempio che crea una variabile di ambiente e ne garantisce la presenza.:
Configuration CrearVariableEntorno {
param ()
Import-DscResource -ModuleName 'PSDscResources'
Node localhost {
Environment CrearRutaVariableEntorno {
Name = 'CrearVariableEntorno'
Value = 'Hola mundo'
Ensure = 'Present'
Path = $true
Target = @('Process','Machine')
}
}
}
# Compilar el MOF en una carpeta de salida
CrearVariableEntorno -OutputPath './CrearVariableEntorno'
Una volta generati i MOF, è il momento di applicarli. Il cmdlet Start-DscConfiguration richiama l'LCM per elaborare la configurazione e può essere eseguito in modalità interattiva per seguire i dettagli:
Start-DscConfiguration -Path 'C:\CrearVariableEntorno' -Wait -Verbose
Per verificare l'aspetto del nodo, è possibile controllare lo stato attuale visualizzato da DSC. Get-DscConfiguration restituisce i valori effettivamente applicati y Get-DscLocalConfigurationManager mostra la metaconfigurazione corrente:
# Estado efectivo del nodo
Get-DscConfiguration
# Metaconfiguración (LCM)
Get-DscLocalConfigurationManager
Se è necessario "sbloccare" una configurazione, esiste anche una via d'uscita. Remove-DscConfigurationDocument -Stage Current -Verbose elimina il documento applicato e lascia il nodo pronto a ricevere un altro MOF.
Negli scenari gestiti, a volte potrebbe essere necessario applicare una metaconfigurazione LCM (ad esempio, per modificare la modalità di aggiornamento o per indirizzare un Pull Server). Ciò viene fatto generando un MOF di metaconfigurazione e applicandolo con Set-DscLocalConfigurationManager -Path 'c:\metaconfig\localhost.meta.mof' -Verbose.
Local Configuration Manager: modalità, frequenza e configurazioni parziali
L'LCM definisce come e quando vengono applicate le configurazioni. Parametri come ConfigurationMode (ApplyOnly, ApplyAndMonitor o ApplyAndAutoCorrect) e le frequenze RefreshFrequencyMins y ConfigurationModeFrequencyMins Controllano se il nodo si applica una sola volta, monitora o monitora e corregge automaticamente.
Inoltre, è possibile lavorare in spinta o in trazione. In pull, i nodi interrogano un server di configurazione (Pull Server) per scaricare MOF e moduli in base al loro identificativo. Questo approccio è molto utile su larga scala perché centralizza le versioni e la conformità.
A partire da Windows Server 2016 (DSC v2), LCM supporta configurazioni parziali. Consiste nel suddividere la configurazione in frammenti indipendenti. che l'LCM combina: ad esempio, un team di sicurezza definisce la propria parte e un altro team definisce la parte delle applicazioni, senza pestarsi i piedi a vicenda.
Scenari di utilizzo nella vita reale
Il DSC è ideale per 'standard operativi' ripetibili e verificabili. Alcune applicazioni tipiche includono la configurazione di ruoli e funzionalità, la protezione dei servizi, la preparazione di IIS, l'installazione di pacchetti, l'utilizzo del Registro di sistema o la definizione di variabili di ambiente.Puoi trovare guide pratiche su come manipolare il registro con PowerShell per integrarlo nelle tue configurazioni.
Per le applicazioni, è possibile automatizzare l'installazione, la configurazione delle dipendenze, la pubblicazione del sito e la messa a punto. Il bello è che la visualizzazione risultante è coerente. su tutti i nodi, sia che si tratti di un laboratorio o di un ambiente di produzione.
Per quanto riguarda sicurezza e conformità, DSC è la soluzione ideale. Criteri di rafforzamento, impostazioni del firewall, account locali o criteri di controllo Diventano una configurazione verificabile e sottoposta a revisione, non un "ricettario" manuale.
Gestione della rete (adattatori, IP, regole, servizi) rientrano anch'essi nel novero. Se qualcosa viene alterato, il motore lo rileva e, a seconda della modalità, ripristina lo stato, che riduce i derivati imprevisti e le ore di supporto.
Per fare un esempio semplice, immagina di voler mantenere sempre attivo un servizio critico. Con una risorsa Service e la modalità ApplyAndAutoCorrect, se qualcuno lo interrompe, LCM lo riprendePuoi anche affidarti alle attività programmate per rafforzare il controllo.
Integrazione con Azure e orchestrazione
DSC dà il meglio di sé quando fa parte di una catena di automazione. Azure Automation può orchestrare il provisioning (runbook, flussi di lavoro) e delegare la configurazione delle VM a DSC., sia in Azure che in locale.
Un modello comune è quello di pubblicare la configurazione su un immagazzinamento e associarlo alle VM con estensione DSC. Comandi come Publish-AzureVMDscConfiguration prepara il tuo copione in un .zip con i moduli necessari e Set-AzureVMDSCExtension lo applica nella creazione.
# Publicar la configuración (convierte el .ps1 y módulos en .zip)
Publish-AzureVMDscConfiguration -ConfigurationPath './MiConfig.ps1' -Force
# Asignar la configuración a una VM al desplegarla
Set-AzureVMDSCExtension -VM $vm -ConfigurationArchive 'MiConfig.zip' -ConfigurationName 'NombreDeConfig'
Nelle distribuzioni IaaS, l'idea è semplice: L'orchestrazione crea e connette le risorse cloud (rete, storage, VM) e DSC configura il sistema operativo e le applicazioni all'interno di ciascuna VMSe esegui anche il versioning e il test delle tue configurazioni, otterrai ambienti riproducibili.
Installazione e utilizzo del DSC multipiattaforma
Il DSC moderno è distribuito come file binari portatili. Puoi scaricare l'ultima edizione dal repository GitHub di PowerShell/DSC, decomprimerla e aggiungere la cartella al tuo PATH.Nessuna installazione complicata o dipendenze extra.
Su Windows, puoi installarlo anche da Microsoft Store tramite WinGet. Per prima cosa individua il pacchetto e poi installa la versione stabile o quella di anteprima:
# Buscar los paquetes publicados
winget search DesiredStateConfiguration --source msstore
# Instalar la versión estable
winget install --id 9NVTPZWRC6KQ --source msstore
# Instalar la versión preliminar
winget install --id 9PCX3HX4HZ0Z --source msstore
Questo DSC funziona con documenti di configurazione scritti in JSON o YAML e con schemi anch'essi in JSON. La CLI dsc consente di richiamare risorse individuali, applicare interi documenti e scrivere risorse in qualsiasi linguaInoltre, gli adattatori sopra menzionati consentono di sfruttare le risorse PSDSC esistenti.
Standardizzando la struttura dei documenti e degli output utilizzando schemi JSON, Integrazione con altri strumenti della piattaforma (WinGet, Dev Box, Azure Machine Configuration) È più diretto e facilita i moderni flussi di lavoro e le pipeline.
Buone pratiche e conformità normativa
Per evitare il caos, è consigliabile modularizzare. Suddividi le tue configurazioni in componenti riutilizzabili e crea moduli di risorse per parti complesse.Ciò consente di effettuare la manutenzione e la scalabilità con meno attrito.
Controlla la versione di tutto nel controllo sorgente (Git). Il salvataggio di configurazioni e risorse nei repository facilita il lavoro di squadra, la cronologia e i ripristiniSe utilizzi anche branch e pull request, otterrai recensioni e qualità.
Eseguire il test prima di distribuire in produzione. Strumenti come Pester aiutano a convalidare risorse e configurazioni ed evitare effetti collaterali, e un ambiente di pre-produzione deve essere parte del processo.
Molte organizzazioni seguono framework quali NIST SP 800-53 (ad esempio, controllo CM-2 sulle configurazioni di base) o FISMA. DSC garantisce coerenza e verificabilità per allineare i tuoi sistemi alle policy e agli standard., riducendo lo sforzo di conformità manuale.
Registrazioni e diagnosi
Quando qualcosa non torna, il registro eventi è il tuo alleato. Su Windows, il canale Microsoft-Windows-Dsc/Operational centralizza ciò che è accaduto (implementazione delle risorse, correzioni, errori, ecc.). Se hai bisogno di maggiori dettagli, abilita ulteriori log orientati al debug.
In Azure, esaminare anche i log dell'estensione DSC e la diagnostica della VM. Correlare l'output di Start-DscConfiguration -Verbose con il visualizzatore eventi risparmi tempo per individuare la risorsa esatta che ha avuto esito negativo.
DSC, sia nella versione classica di PowerShell che multipiattaforma, fornisce una solida base per l'IaC su server e workstation. Definisci lo stato, condividilo come codice, testalo e lascia che il motore svolga il lavoro ripetitivo.; così i tuoi team potranno concentrarsi sul valore reale, non sullo spegnere incendi.
Scrittore appassionato del mondo dei byte e della tecnologia in generale. Adoro condividere le mie conoscenze attraverso la scrittura, ed è quello che farò in questo blog, mostrarti tutte le cose più interessanti su gadget, software, hardware, tendenze tecnologiche e altro ancora. Il mio obiettivo è aiutarti a navigare nel mondo digitale in modo semplice e divertente.
