PowerShell 4: Desired State Configuration

Con la versione 4.0 di PowerShell, introdotta con Ws2012 R2 e W8.1 e disponibile come download per WS2008R2/W7 e WS2012/W8 tramite il Windows Management Framework 4.0 (WMF), è stata resa disponibile la funzionalità Windows PowerShell Desired State Configuration (DSC).

DCS premette di verificare la corretta configurazione dei componenti di un sistema locale o remoto, di implementare il continuous deployment e di evitare il configuration drift in modo dichiarativo, autonomo e idempotente.

imageTramite DCS è infatti possibile realizzare degli “script” dichiarativi (DSC Configuration) nei quali è possibile specificare i componenti (DSC Resource) che devono essere presenti o a assenti su di un computer locale o remoto (DSC Node), inoltre è possibile specificare come i componenti debbano essere configurati.

Tramite le DCS Resources è possibile configurare un gran numero di funzionalità e risorse del sistema tra cui:

  • Estrazione di file .zip in path specifici
  • Gestione delle variabili d’ambiente del sistema
  • Gestione file e directory
  • Gestione gruppi e utenti locali
  • Log di messaggi di configurazione
  • Installazione/gestione package (Windows Installer e setup.exe)
  • Configurazione di processi e gestione di servizi
  • Gestione chiavi di registry e valori
  • Aggiunta/rimozione ruoli e funzionalità
  • Esecuzione PS script block
  • Definizione di DSC Resource custom (file MOF, Script Module .psm1, Module manifest .psm1)

Per i dettagli sull’implementazione dei DSC script block si veda Get Started with Windows PowerShell Desired State Configuration e Windows PowerShell Desired State Configuration Data, mentre per ulteriori informazioni sulla configurazione delle DSC Resources si veda Windows PowerShell Desired State Configuration Resources.

L’esecuzione dello script genera un file MOF (Managed Object Format) cui nome è pari al nome del nodo in una subdirectory con nome pari allo script nella directory corrente (nel caso vi siano nello script più nodi verranno creati più file MOF).

E’ possibile specificare la directory su cui redirigere la creazione dei file MOF tramite specificando il parametro –OutputPath.

image

Tramite il CmdLet Start-DscConfiguration è possibile applicare le configurazioni contenute nel file MOF al server o ai server locali o remoti, questo tipo di distribuzione dei file MOF viene definito Push Model. Utilizzando questo modello per lo Staging i DCS Data (file MOF) saranno inviati al sistema da configurare che dovrà disporre anche degli eventuali custom providers utilizzati che dovranno essere memorizzati nella directory %SYSTEMROOT%\System32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PSProviders.

image

DCS mette a disposizione una serie di CmdLet per il test e la verifica delle configurazioni:

$session = New-CimSession –ComputerName “Server01” –Credential Domain\UserName

# Rilevazione configurazione corrente
Get-DscConfiguration -CimSession $session

# Restore di una configurazione precedente
Restore-DscConfiguration -CimSession $session

# Confronto della configurazione attuale con la configurazione desiderata (il CmdLet ritorna True le due configurazioni coincidono)
Test-DscConfiguration -CimSession $session

Per ulteriori informazioni sul CmdLets di DSC si veda Windows PowerShell Desired State Configuration Cmdlets.

E’ possibile testare la funzionalità DSC basata sul Push Model tramite il virtual lab Desired State Configuration with Window Server 2012 R2 disponibile al seguente Explore Virtual Labs!.

E’ possibile in alternativa gestire la distribuzione dei file MOF con un modello di tipo Pull configurando un Pull server ovvero un server web basato su IIS con un’interfaccia OData (Open Data Protocol), questo tipo di approccio è più indicato nel caso sia necessario gestire tramite DSC più server, i dettagli del DCS Pull Model Protocol sono pubblici in conformità all’iniziativa Microsoft Open Specifications e disponibili al seguente [MS-DSCPM]: Desired State Configuration Pull Model Protocol.

Per installare un Pull Server è necessario aggiungere la feature Windows PowerShell Desired State Configuration Service tramite Server Manager o tramite il comando Add-WindowsFeature Dsc-Service. (la feature aggiungerà le necessarie dipendenze quali IIS, i moduli necessari e il Management OData Extension)

Il sistema da gestire contatterà il Pull server tramite un URI e un ID per ottenere la sua configurazione e verificare se tutti i custom provider sono disponibili, in caso contrario li scaricherà. E’ possibile distribuire ai server remoti la configurazione per utilizzare un DSC Pull Server utilizzando lo stesso DSC tramite uno script PS di configurazione DSC di questo tipo:

Configuration SetPullMode

{

  Node Server01

  {

      # Set the DSC engine (LCM) to Pull mode
      DesiredStateConfigurationSettings LCM

     {

        ConfigurationID = “e528dee8-6f0b-4885-98a1-1ee4d8e86d82

        ConfigurationMode = “Pull”

        DownloadManagerName = “WebDownloadManager”

        DownloadManagerCustomData = @{ServerUrl = “http://<PullServer>:8080/PSDSCPullServer/PSDSCPullServer.svc” }

        PullActionRefreshFrequencyInSeconds = 60

     }

  }

}

SetPullMode

Set-DSCLocalConfigurationManager -ComputerName Server01 -Path .\SetPullMode –Verbose

Per alcune guide step by step sull’implementazione di un DSC Pull Server si vedano i seguenti:

Per ulteriori informazioni si vedano anche i seguenti:

Io e Mario Serra parleremo di DSC nella sessione Windows Server 2012 R2: Manage Your Server with PowerShell che terremo alla Server Infrastructure Days Online il 24 ottobre.

Se intendete provare testare DSC in un vostro lab vi ricordo che nel TechNet Evaluation Center sono disponibili la versione di valutazione a 180 giorni di Windows Server 2012 R2 e la versione a 90 giorni di Windows 8.1 Enterprise.