PowerShell DSC gebruiken om gewenste status te bereiken

Voltooid

U kunt PowerShell DSC gebruiken om de gewenste status van een virtuele machine op te geven. In deze les leert u meer over PowerShell DSC en hoe u hiermee de status van uw VM's kunt beheren. In het voorbeeldscenario gebruikt u PowerShell DSC om ervoor te zorgen dat IIS voor Windows Server consistent is geïnstalleerd en geconfigureerd op al uw webservers.

Aan het einde van deze les hebt u het volgende geleerd:

  • Hoe knooppunt- en configuratieblokken werken.
  • Wat referentie-elementen zijn.
  • PowerShell DSC-code schrijven voor het idempotent installeren van Microsoft IIS.

DSC-resources

U hebt gezien dat PowerShell DSC een declaratieve scripttaal is. Declaratieve programmering richt zich op het resultaat, niet op het traject. Wanneer u een Azure-resource op een consistente manier wilt configureren en implementeren op een set VM’s, kan PowerShell DSC u helpen. U kunt PowerShell DSC zelfs gebruiken als u niet bekend bent met de technische stappen voor het installeren en configureren van de software en services.

Windows Server heeft een aantal ingebouwde PowerShell DSC-resources. U kunt deze resources weergeven door de Get-DSCResource PowerShell-cmdlet uit te voeren.

Get-DscResource | select Name,Module,Properties

De volgende tabel bevat enkele van de ingebouwde DSC-resources van PowerShell.

Bron Beschrijving
Bestand Bestanden en mappen beheren op een knooppunt
Archiveren Een archief in de zip-indeling decomprimeren
Omgeving Omgevingsvariabelen van systeem beheren
Logboek Een bericht wegschrijven naar het DSC-gebeurtenislogboek
Pakket Een pakket installeren of verwijderen
Register Registersleutel van een knooppunt beheren (met uitzondering van HKEY-gebruikers)
Script PowerShell-opdrachten uitvoeren op een knooppunt
Service Windows-services beheren
User Lokale gebruikers op een knooppunt beheren
WindowsFeature Een functie of onderdeel op een knooppunt toevoegen of verwijderen
WindowsOptionalFeature Een optionele functie of onderdeel op een knooppunt toevoegen of verwijderen
WindowsProcess Een Windows-proces beheren

Gebruik voor complexere resources, zoals Active Directory-integratie, de DSC Resource Kit, die maandelijks wordt bijgewerkt. Aan het einde van deze module vindt u een koppeling naar de DSC Resource Kit in de samenvattingseenheid.

De resource die u wilt configureren, moet al deel uitmaken van de VM of van de VM-installatiekopie. Anders kan de taak niet worden gecompileerd en uitgevoerd.

Anatomie van een DSC-codeblok

Een DSC-codeblok bevat vier secties. Aan de hand van het volgende voorbeeld gaan we deze secties bespreken. In het voorbeeld maken de getallen geen onderdeel uit van de syntaxis. Ze worden aangeduid als opmerkingen en verwijzen naar secties in de volgende discussie.

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

De configuratiesyntaxis omvat de volgende secties:

  1. Configuratie: Het configuratieblok is het buitenste scriptblok. Het begint met het Configuration trefwoord en u geeft een naam op. Hier is de naam van de configuratie MyDscConfiguration.

    In het configuratieblok wordt de gewenste configuratie beschreven. U kunt een configuratieblok beschouwen als een functie, behalve dat dit blok een beschrijving bevat van de resources die moeten worden geïnstalleerd, in plaats van de code om deze te installeren.

    Net als een PowerShell-functie accepteert een configuratieblok parameters. U kunt bijvoorbeeld parameters gebruiken voor de naam van het knooppunt.

    Configuration MyDscConfiguration {
    param
    (
        [string] $ComputerName='localhost'
    )
    
    Node $ComputerName {
        ...
    }
    
  2. Knooppunt: U kunt een of meer knooppuntblokken hebben. Het knooppuntblok bepaalt de namen van .mof-bestanden die worden gegenereerd wanneer u de configuratie compileert. De naam localhost van het knooppunt genereert bijvoorbeeld slechts één localhost.mof-bestand , maar u kunt dat .mof-bestand naar elke server verzenden. U genereert meerdere .mof-bestanden wanneer u meerdere knooppuntnamen gebruikt.

    Gebruik de matrixnotatie in het knooppuntblok om u te richten op meerdere hosts. Voorbeeld:

    Node @('WEBSERVER1', 'WEBSERVER2', 'WEBSERVER3')
    
  3. Resource: U kunt een of meer resourceblokken gebruiken om de resources op te geven die u wilt configureren. In dit geval is er één resourceblok, dat verwijst naar de resource WindowsFeature. De WindowsFeature resource hier zorgt ervoor dat de Web-Server Windows-functie is geïnstalleerd.

  4. MyDscConfiguration: Met deze aanroep wordt het MyDscConfiguration blok aangeroepen. Het is vergelijkbaar met het uitvoeren van een functie. Wanneer u een configuratieblok uitvoert, wordt dit gecompileerd in een MOF-document (Managed Object Format). MOF is een gecompileerde taal die is gemaakt door de Desktop Management Task Force, en is gebaseerd op Interface Definition Language.

    Voor elk knooppunt dat wordt vermeld in het DSC-script, wordt een .mof-bestand gemaakt in de map die u hebt opgegeven met de parameter -OutputPath.

Configuratiegegevens in een DSC-script

In een blok met configuratiegegevens kunt u gegevens opgeven die mogelijk nodig zijn voor het configuratieproces. U kunt deze gegevens toepassen op benoemde knooppunten of u past deze globaal toe op alle knooppunten.

Een blok met configuratiegegevens is een benoemd blok dat een matrix met knooppunten bevat. De matrix moet de naam AllNodes hebben. Binnen de matrix AllNodes geeft u de gegevens voor een knooppunt op met behulp van de variabele NodeName.

Stel u wilt, op basis van het vorige scenario, op de webserver die is geïnstalleerd op elk knooppunt, de eigenschap SiteName instellen op verschillende waarden. U kunt een blok met configuratiegegevens als volgt definiëren:

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

Als u een eigenschap in elk knooppunt op dezelfde waarde wilt instellen , geeft u NodeName = "*" op in de matrix AllNodes.

Referenties in een DSC-script beveiligen

Voor een DSC-script kunnen referentiegegevens zijn vereist voor het configuratieproces. Vermijd het plaatsen van een referentie in tekst zonder opmaak in uw hulpprogramma voor broncodebeheer. In plaats hiervan kunnen DSC-configuraties in Azure Automation verwijzen naar referenties die zijn opgeslagen in een PSCredential-object. U kunt een parameter voor het DSC-script definiëren met behulp van het PSCredential type. Voordat u het script uitvoert, haalt u de gebruikersreferenties op, gebruikt u de referenties om een nieuw PSCredential object te maken en geeft u dit object door aan het script als parameter.

Referenties worden niet standaard versleuteld in .mof-bestanden; ze worden als tekst zonder opmaak weergegeven. Als u referenties wilt versleutelen, gebruikt u een certificaat in uw configuratiegegevens. De persoonlijke sleutel van het certificaat moet aanwezig zijn op het knooppunt waarop u de configuratie wilt toepassen. Certificaten worden geconfigureerd via LCM (Local Configuration Manager) van het knooppunt.

Vanaf PowerShell 5.1 worden .mof-bestanden op knooppunten ook in rust versleuteld. Tijdens een overdracht worden alle referenties versleuteld via WinRM.

Configuratie naar een knooppunt pushen

Nadat u een gecompileerd .mof-bestand voor een configuratie hebt gemaakt, kunt u het naar een knooppunt pushen door de Start-DscConfiguration cmdlet uit te voeren. Als u het pad naar de map toevoegt, wordt elk .mof-bestand in deze map toegepast op het knooppunt:

Start-DscConfiguration -path D:\

Deze stap komt overeen met de push-modus waarover u informatie hebt gekregen in de vorige les.

De configuratie voor knooppunten ophalen

Als u honderden VM's hebt in Azure, is het gebruik van de pull-modus beter geschikt dan de push-modus.

U kunt een Azure Automation-account configureren om te fungeren als een pull-service; upload de configuratie naar het Automation-account en registreer uw VM's vervolgens bij dit account.

Voordat u uw configuratie compileert, importeert u alle PowerShell-modules die het DSC-proces nodig heeft in uw Automation-account. Deze modules bepalen hoe de taak moet worden uitgevoerd om de gewenste status te verkrijgen.

Zo wordt in de vorige les de PowerShell-module xSmbShare gebruikt door een DSC-script om aan DSC door te geven hoe de status van een bestandsshare moet worden gecontroleerd. DSC haalt automatisch modules op uit het Automation-account naar het knooppunt.

In het volgende diagram ziet u hoe u Azure Automation State Configuration instelt. We gaan deze stappen in de volgende les verkennen.

Diagram met de stappen voor het instellen van DSC.

Elke 15 minuten (standaardinstelling) wordt via LCM op de VM een aanvraag naar Azure Automation verzonden om te controleren of er wijzigingen in het DSC-configuratiebestand zijn. Wijzigingen die zijn aangebracht in de VM's, worden vastgelegd in de gewenste statusconfiguratie. Als u een configuratie wijzigt, kunt u deze uploaden naar het Automation-account om de VM's automatisch opnieuw te configureren.

In het volgende diagram worden de stappen van het proces van LCM weergegeven voor het beheren van de gewenste status op de VM.

Diagram dat laat zien hoe de VM Azure Automation peilt.

Uw Automation-account verwerkt de referenties standaard. Dit beheer vermindert de complexiteit van het beveiligen van referenties en het werken ermee.