DSC-konfigurationer

Gäller för: Windows PowerShell 4.0, Windows PowerShell 5.0

DSC-konfigurationer är PowerShell-skript som definierar en särskild typ av funktion. Om du vill definiera en konfiguration använder du Nyckelordskonfiguration för PowerShell.

Configuration MyDscConfiguration {
    Node "TEST-PC1" {
        WindowsFeature MyFeatureInstance {
            Ensure = 'Present'
            Name = 'RSAT'
        }
        WindowsFeature My2ndFeatureInstance {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}
MyDscConfiguration

Spara skriptet som en .ps1 fil.

Konfigurationssyntax

Ett konfigurationsskript består av följande delar:

  • Konfigurationsblocket. Det här är det yttersta skriptblocket. Du definierar det med hjälp av nyckelordet Konfiguration och anger ett namn. I det här fallet är MyDscConfigurationnamnet på konfigurationen .
  • Ett eller flera Nodblock . Dessa definierar de noder (datorer eller virtuella datorer) som du konfigurerar. I ovanstående konfiguration finns det ett Node-block som är avsett för en dator med namnet TEST-PC1. Node-blocket kan acceptera flera datornamn.
  • Ett eller flera resursblock. Det är här konfigurationen anger egenskaperna för de resurser som den konfigurerar. I det här fallet finns det två resursblock som var och en anropar WindowsFeature-resursen .

Anteckning

WindowsFeature DSC-resursen är endast tillgänglig på Windows Server-datorer. För datorer med ett klientoperativsystem, till exempel Windows 11, måste du använda WindowsOptionalFeature i stället. Mer information finns i avsnittet "WindowsOptionalFeature" i dokumentationen för PSDscResources.

I ett konfigurationsblock kan du göra vad som helst som du normalt kan göra i en PowerShell-funktion. Om du i föregående exempel inte vill hårdkoda namnet på måldatorn i konfigurationen kan du lägga till en parameter för nodnamnet.

I det här exemplet anger du namnet på noden genom att skicka den som parametern ComputerName när du kompilerar konfigurationen. Namnet är localhostsom standard .

Configuration MyDscConfiguration
{
    param
    (
        [string[]]$ComputerName='localhost'
    )

    Node $ComputerName
    {
        WindowsFeature MyFeatureInstance
        {
            Ensure = 'Present'
            Name = 'RSAT'
        }

        WindowsFeature My2ndFeatureInstance
        {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}

MyDscConfiguration

Node-blocket kan också acceptera flera datornamn. I exemplet ovan kan du antingen använda parametern -ComputerName eller skicka en kommaavgränsad lista över datorer direkt till Node-blocket .

MyDscConfiguration -ComputerName "localhost", "Server01"

När du anger en lista över datorer till Node-blocket måste du använda matrisnotation i en konfiguration.

Configuration MyDscConfiguration
{
    Node @('localhost', 'Server01')
    {
        WindowsFeature MyFeatureInstance
        {
            Ensure = 'Present'
            Name = 'RSAT'
        }

        WindowsFeature My2ndFeatureInstance
        {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}

MyDscConfiguration

Kompilera konfigurationen

Innan du kan implementera en konfiguration måste du kompilera den till ett MOF-dokument. Det gör du genom att anropa konfigurationen på samma sätt som du anropar en PowerShell-funktion. Den sista raden i exemplet som bara innehåller namnet på konfigurationen anropar konfigurationen.

Anteckning

Om du vill anropa en konfiguration måste funktionen finnas i ett globalt omfång (som med andra PowerShell-funktioner). Du kan göra detta antingen genom att "dot-sourcing" skriptet, eller genom att köra konfigurationsskriptet med hjälp av F5 eller klicka på knappen Kör skript i ISE. Kör kommandot . .\myConfig.ps1 där myConfig.ps1 är namnet på den skriptfil som innehåller konfigurationen för att punktkälla skriptet.

När du anropar konfigurationen gör det följande:

  • Löser alla variabler
  • Skapar en mapp i den aktuella katalogen med samma namn som konfigurationen.
  • Skapar en fil med namnet NodeName.mof i den nya katalogen, där NodeName är namnet på målnoden i konfigurationen. Om det finns fler än en nod skapas en MOF-fil för varje nod.

Anteckning

MOF-filen innehåller all konfigurationsinformation för målnoden. Därför är det viktigt att skydda den. Mer information finns i Skydda MOF-filen.

Kompileringen av den första konfigurationen ovan resulterar i följande mappstruktur:

. .\MyDscConfiguration.ps1
MyDscConfiguration
    Directory: C:\users\default\Documents\DSC Configurations\MyDscConfiguration
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/23/2015   4:32 PM           2842 localhost.mof

Om konfigurationen tar en parameter, som i det andra exemplet, måste den anges vid kompileringen. Så här skulle det se ut:

. .\MyDscConfiguration.ps1
MyDscConfiguration -ComputerName 'MyTestNode'
    Directory: C:\users\default\Documents\DSC Configurations\MyDscConfiguration
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/23/2015   4:32 PM           2842 MyTestNode.mof

Använda nya resurser i konfigurationen

Om du körde föregående exempel kanske du märkte att du fick en varning om att du använde en resurs utan att uttryckligen importera den. Idag levereras DSC med 12 resurser som en del av modulen PSDesiredStateConfiguration.

Cmdleten Get-DscResource kan användas för att avgöra vilka resurser som är installerade i systemet och tillgängliga för användning av LCM. När de här modulerna har placerats i $env:PSModulePath och identifieras korrekt av Get-DscResource måste de fortfarande läsas in i konfigurationen.

Import-DscResource är ett dynamiskt nyckelord som bara kan identifieras i ett konfigurationsblock , det är inte en cmdlet. Import-DscResource stöder två parametrar:

  • ModuleName är det rekommenderade sättet att använda Import-DscResource. Den accepterar namnet på modulen som innehåller de resurser som ska importeras (samt en strängmatris med modulnamn).
  • Namn är namnet på den resurs som ska importeras. Det här är inte det egna namnet som returneras som "Namn" av Get-DscResource, utan klassnamnet som används när du definierar resursschemat (returneras som ResourceType av Get-DscResource).

Mer information om hur du använder Import-DSCResourcefinns i Använda Import-DSCResource

Skillnader i PowerShell v4 och v5

Det finns skillnader i var DSC-resurser måste lagras i PowerShell 4.0. Mer information finns i Resursplats.

Se även