Använd PowerShell DSC för att uppnå ett önskat tillstånd
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:
Konfiguration: Konfigurationsblocket är det yttersta skriptblocket. Det börjar med nyckelordet
Configuration
och du anger ett namn. Här är namnet på konfigurationenMyDscConfiguration
.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 { ... }
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')
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
. ResursenWindowsFeature
här ser till attWeb-Server
Windows-funktionen är installerad.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.
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.
Ditt Automation-konto hanterar autentiseringsuppgifterna internt. Den här hanteringen minskar komplexiteten med att skydda och arbeta med autentiseringsuppgifter.