Använd PowerShell DSC för att uppnå önskat tillstånd

Slutförd

Du kan använda PowerShell DSC för att ange önskad status för en virtuell dator. I den här lektionen får du lära dig mer om PowerShell DSC och hur du använder den för att styra tillståndet för dina virtuella datorer. I exempelscenariot använder du PowerShell DSC för att se till att IIS för Windows Server är installerat och konfigurerat konsekvent för alla dina webbservrar.

I slutet av den här lektionen ska du:

  • Förstå nod- och konfigurationsblock.
  • Förstå tillgångar för autentiseringsuppgifter.
  • Skriv PowerShell DSC-kod för att installera Microsoft IIS idempotently.

DSC-resurser

Du har sett att PowerShell DSC är ett deklarativt skriptspråk. Deklarativ programmering fokuserar på resultatet, inte resan. När du behöver konfigurera och distribuera en Azure-resurs på ett konsekvent sätt över en uppsättning virtuella datorer kan PowerShell DSC hjälpa dig. Du kan använda PowerShell DSC även om du inte är bekant med de tekniska stegen för att installera och konfigurera programvaran och tjänsterna.

Windows Server har en uppsättning inbyggda PowerShell DSC-resurser. Du kan visa dessa resurser genom att köra PowerShell-cmdleten Get-DSCResource .

Get-DscResource | select Name,Module,Properties

I följande tabell visas några av de inbyggda PowerShell DSC-resurserna.

Resurs Beskrivning
Arkiv Hanterar filer och mappar på en nod
Arkiv Dekomprimerar ett arkiv i .zip-format
Miljö Hanterar systemmiljövariabler
Loggas Skriver ett meddelande i DSC-händelseloggen
Paket Installerar eller tar bort ett paket
Register Hanterar en nods registernyckel (förutom HKEY-användare)
Skript Kör PowerShell-kommandon på en nod
Service Hanterar Windows-tjänster
User Hanterar lokala användare på en nod
Windowsfeature Lägger till eller tar bort en roll eller funktion på en nod
WindowsOptionalFeature Lägger till eller tar bort en valfri roll eller funktion på en nod
WindowsProcess Hanterar en Windows-process

Om du vill ha mer komplexa resurser som Active Directory-integrering använder du DSC Resource Kit, som uppdateras varje månad. Du hittar en länk till DSC Resource Kit i sammanfattningsenheten i slutet av den här modulen.

Den resurs som du vill konfigurera måste redan vara en del av den virtuella datorn eller en del av vm-avbildningen. Annars kan jobbet inte kompileras och köras.

Anatomi för ett DSC-kodblock

Ett DSC-kodblock innehåller fyra avsnitt. Använd följande exempel för att ta en närmare titt. I exemplet ingår inte talen i syntaxen. De betecknas som kommentarer, och de refererar till avsnitt i diskussionen som följer.

Configuration MyDscConfiguration {              ##1
    Node "localhost" {                          ##2
        WindowsFeature MyFeatureInstance {      ##3
            Ensure = 'Present'
            Name = 'Web-Server'
        }
    }
}
MyDscConfiguration -OutputPath C:\temp\         ##4

Konfigurationssyntaxen innehåller följande avsnitt:

  1. Konfiguration: Konfigurationsblocket är det yttersta skriptblocket. Det börjar med nyckelordet Configuration och du anger ett namn. Här är MyDscConfigurationnamnet på konfigurationen .

    Konfigurationsblocket beskriver önskad konfiguration. Tänk på ett konfigurationsblock som en funktion, förutom att det innehåller en beskrivning av de resurser som ska installeras i stället för koden för att installera dem.

    Precis som en PowerShell-funktion kan ett konfigurationsblock ta parametrar. Du kan till exempel parametrisera nodnamnet.

    Configuration MyDscConfiguration {
    param
    (
        [string] $ComputerName='localhost'
    )
    
    Node $ComputerName {
        ...
    }
    
  2. Nod: Du kan ha ett eller flera nodblock. Nodblocket avgör namnen på .mof-filer som genereras när du kompilerar konfigurationen. Nodnamnet localhost genererar till exempel bara en localhost.mof-fil , men du kan skicka .mof-filen till valfri server. Du genererar flera .mof-filer när du använder flera nodnamn.

    Använd matrisens notation i nodblocket för att rikta in sig på flera värdar. Till exempel:

    Node @('WEBSERVER1', 'WEBSERVER2', 'WEBSERVER3')
    
  3. Resurs: Du kan använda ett eller flera resursblock för att ange vilka resurser som ska konfigureras. I det här fallet refererar ett enda resursblock till resursen WindowsFeature . Resursen WindowsFeature här ser till att Web-Server Windows-funktionen är installerad.

  4. MyDscConfiguration: Det här anropet MyDscConfiguration anropar blocket. Det är som att köra en funktion. När du kör ett konfigurationsblock kompileras det till ett MOF-dokument (Managed Object Format). MOF är ett kompilerat språk som skapats av Desktop Management Task Force och baseras på gränssnittets definitionsspråk.

    För varje nod som anges i DSC-skriptet skapas en .mof-fil i mappen som du angav med parametern -OutputPath .

Konfigurationsdata i ett DSC-skript

I ett konfigurationsdatablock kan du ange data som konfigurationsprocessen kan behöva. Du kan använda dessa data på namngivna noder eller tillämpa dem globalt på alla noder.

Ett konfigurationsdatablock är ett namngivet block som innehåller en matris med noder. Matrisen måste ha namnet AllNodes. I matrisen AllNodes anger du data för en nod med hjälp av variabeln NodeName .

Med det föregående scenariot ska vi säga att på den webbserver som är installerad på varje nod vill du ange SiteName egenskapen till olika värden. Du kan definiera ett konfigurationsdatablock så här:

$datablock =
@{
    AllNodes =
    @(
        @{
            NodeName = "WEBSERVER1"
            SiteName = "WEBSERVER1-Site"
        },
        @{
            NodeName = "WEBSERVER2"
            SiteName = "WEBSERVER2-Site"
        },
        @{
            NodeName = "WEBSERVER3"
            SiteName = "WEBSERVER3-Site"
        }
    );
}

Om du vill ange samma värde för en egenskap i varje nod anger du NodeName = "*" i matrisen AllNodes .

Skydda autentiseringsuppgifter i ett DSC-skript

Ett DSC-skript kan kräva information om autentiseringsuppgifter för konfigurationsprocessen. Undvik att placera en autentiseringsuppgift i klartext i källkodshanteringsverktyget. I stället kan DSC-konfigurationer i Azure Automation referera till autentiseringsuppgifter som lagras i ett PSCredential objekt. Du kan definiera en parameter för DSC-skriptet med hjälp PSCredential av typen . Innan du kör skriptet hämtar du autentiseringsuppgifterna för användaren, använder autentiseringsuppgifterna för att skapa ett nytt PSCredential objekt och skickar det här objektet till skriptet som en parameter.

Autentiseringsuppgifter krypteras inte som standard i .mof-filer. de exponeras som klartext. Om du vill kryptera autentiseringsuppgifter använder du ett certifikat i dina konfigurationsdata. Certifikatets privata nyckel måste finnas på den nod där du vill tillämpa konfigurationen. Certifikat konfigureras via nodens LCM.

Från och med PowerShell 5.1 krypteras .mof-filer på noden i vila. Under överföring krypteras alla autentiseringsuppgifter via WinRM.

Skicka konfigurationen till en nod

När du har skapat en kompilerad .mof-fil för en konfiguration kan du skicka den till en nod genom att köra cmdleten Start-DscConfiguration . Om du lägger till sökvägen till katalogen tillämpas alla .mof-filer som hittas i katalogen på noden:

Start-DscConfiguration -path D:\

Det här steget motsvarar push-läge, som du lärde dig om i föregående lektion.

Hämta konfigurationen för noder

Om du har hundratals virtuella datorer i Azure är pull-läget lämpligare än push-läge.

Du kan konfigurera ett Azure Automation-konto så att det fungerar som en pull-tjänst. ladda bara upp konfigurationen till Automation-kontot och registrera sedan dina virtuella datorer med det här kontot.

Innan du kompilerar konfigurationen importerar du alla PowerShell-moduler som DSC-processen behöver till ditt Automation-konto. De här modulerna definierar hur du slutför uppgiften för att uppnå önskat tillstånd.

Ett DSC-skript i föregående lektion använde xSmbShare till exempel PowerShell-modulen för att berätta för DSC hur man kontrollerar tillståndet för en filresurs. DSC hämtar automatiskt moduler från Automation-kontot till noden.

Följande diagram visar hur du konfigurerar Azure Automation State Configuration. Vi ska utforska de här stegen mer i nästa lektion.

Diagram that shows the steps to set up DSC.

Som standard efter 15 minuter avsöker LCM på den virtuella datorn Azure Automation efter ändringar i DSC-konfigurationsfilen. Ändringar i de virtuella datorerna registreras i önskad tillståndskonfiguration. Om du ändrar en konfiguration kan du ladda upp den till Automation-kontot för att automatiskt konfigurera om de virtuella datorerna.

Följande diagram visar LCM:s process för att hantera önskat tillstånd på den virtuella datorn.

Diagram that shows how the VM polls Azure Automation.

Ditt Automation-konto hanterar autentiseringsuppgifterna internt. Den här hanteringen minskar komplexiteten i att skydda och arbeta med autentiseringsuppgifter.