Använd PowerShell DSC för att uppnå ett ö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 enheten lär du dig mer om PowerShell DSC och hur du använder det för att kontrollera de virtuella datorernas tillstånd. 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 enheten kommer du att:

  • Förstå nod- och konfigurationsblock.
  • Förstå inloggningstillgångar.
  • Skriva PowerShell DSC-kod för att installera Microsoft IIS idempotent.

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 i en uppsättning virtuella datorer, så kan PowerShell DSC vara till hjälp. Du kan använda PowerShell DSC även när du inte känner till de tekniska stegen för att installera och konfigurera programvara och tjänster.

Windows Server innehåller 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
Fil Hanterar filer och mappar på en nod
Arkiv Dekomprimerar ett arkiv i zip-format
Environment Hanterar systemmiljövariabler
Loggas Skriver ett meddelande i DSC-händelseloggen
Paket Installerar eller tar bort ett paket
Register Hanterar en nods registernyckel (med undantag för HKEY-användare)
Skript Kör PowerShell-kommandon på en nod
Tjänst 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.

DSC-kodblockets anatomi

Ett DSC-kodblock innehåller fyra avsnitt. Ta en närmare titt med hjälp av följande exempel. Siffrorna i exemplet är inte en del av 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 namnet på konfigurationen MyDscConfiguration.

    Konfigurationsblocket beskriver önskad konfiguration. Tänk dig att ett konfigurationsblock är som en funktion, förutom att det innehåller en beskrivning av de resurser som ska installeras, snarare än den kod som ska installera dem.

    Precis som en PowerShell-funktion kan ett konfigurationsblock hantera parametrar. Du kan till exempel parameterisera namnet på noden.

    Configuration MyDscConfiguration {
    param
    (
        [string] $ComputerName='localhost'
    )
    
    Node $ComputerName {
        ...
    }
    
  2. Nod: Du kan ha ett eller flera nodblock. Nodblocket bestämmer namnen på de .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.

    Du når flera värdar om du använder matrisnotationen i nodblocket. 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 enskild 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 en funktion som körs. 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 DMTF (Desktop Management Task Force), och det baseras på Internet Definition Language.

    För varje nod som listas i DSC-skriptet skapas en .mof-fil i den mapp som du har angett med parametern -OutputPath.

Konfigurationsdata i ett DSC-skript

Du kan tillhandahålla de data som konfigurationsprocessen eventuellt behöver i ett konfigurationsdatablock. 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. Inuti matrisen AllNodes anger du data för en nod med hjälp av variabeln NodeName.

Låt oss, utifrån föregående scenario, säga att du vill ställa in egenskapen SiteName på olika värden på den webbserver som är installerad på respektive nod. 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 tilldela en egenskap samma värde i varje nod anger du NodeName = "*" i matrisen AllNodes.

Skydda autentiseringsuppgifter i ett DSC-skript

Ett DSC-skript kan kräva autentiseringsuppgifter för konfigurationsprocessen. Undvik att placera en autentiseringsuppgift i klartext i källkodshanteringsverktyget. DSC-konfigurationer i Azure Automation kan istället 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 autentiseringsuppgifterna måste du använda ett certifikat i dina konfigurationsdata. Certifikatets privata nyckel måste finnas på den nod på vilken du vill tillämpa konfigurationen. Certifikat konfigureras via nodens LCM.

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

Push-överföra konfigurationen till 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 används alla .mof-filer som hittas i katalogen på noden:

Start-DscConfiguration -path D:\

Det här steget motsvarar push-läget, vilket du läste om i föregående enhet.

Hämta konfigurationen för noder

Om du har hundratals virtuella datorer i Azure är det lämpligare att använda pull-läget än push-läget.

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 ska utföra uppgiften så att du uppnår det önskade tillståndet.

Ett DSC-skript i föregående enhet använde exempelvis xSmbShare PowerShell-modulen för att tala om för DSC hur en filresurs tillstånd ska kontrolleras. DSC hämtar automatiskt moduler från Automation-kontot till noden.

Följande diagram visar hur Azure Automation State Configuration ska konfigureras. Dessa steg utforskar vi i nästa enhet.

Diagram som visar stegen för att konfigurera DSC.

LCM på den virtuella datorn att söker efter 15 minuter som standard igenom Azure Automation efter ändringar i DSC-konfigurationsfilen. Eventuella ändringar i de virtuella datorerna registreras i önskad tillståndskonfiguration. Om du ändrar en konfiguration kan du överföra den till Automation-kontot, så att de virtuella datorerna konfigureras om automatiskt.

Följande diagram visar LCM-processen för hantering av det önskade tillståndet på den virtuella datorn.

Diagram som visar hur den virtuella datorn avsöker Azure Automation.

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