Verwenden von PowerShell DSC zum Erreichen eines gewünschten Zustands

Abgeschlossen

Sie können PowerShell DSC verwenden, um den gewünschten Zustand für eine VM festzulegen. In dieser Lerneinheit erfahren Sie mehr über PowerShell DSC und über die Verwendung zum Steuern der Zustände Ihrer VMs. Im Beispielszenario verwenden Sie PowerShell DSC, um sicherzustellen, dass IIS für Windows Server einheitlich auf all Ihren Webservern installiert und konfiguriert sind.

Nach dieser Lerneinheit:

  • Verfügen Sie über Kenntnisse über Knoten- und Konfigurationsblöcke.
  • Verfügen Sie über Kenntnisse über Anmeldeinformationen.
  • Schreiben Sie PowerShell DSC-Code, um Microsoft IIS idempotent zu installieren.

In DSC-Ressourcen

Sie haben bereits erfahren, dass PowerShell DSC eine deklarative Skriptsprache ist. Die deklarative Programmierung konzentriert sich auf das Ergebnis, nicht auf den Weg dorthin. Wenn Sie eine Azure-Ressource einheitlich auf mehreren VMs bereitstellen und konfigurieren müssen, kann PowerShell DSC behilflich sein. Selbst wenn Sie nicht mit den technischen Schritten zum Installieren und Konfigurieren der Software und Dienste vertraut sind, können Sie PowerShell DSC verwenden.

Windows Server verfügt über integrierte PowerShell DSC-Ressourcen. Sie können diese Ressourcen anzeigen, indem Sie das PowerShell-Cmdlet Get-DSCResource ausführen.

Get-DscResource | select Name,Module,Properties

In der folgenden Tabelle werden einige der integrierten PowerShell DSC-Ressourcen aufgeführt.

Ressource BESCHREIBUNG
Datei Verwaltet Dateien und Ordner auf einem Knoten.
Archivieren Dekomprimiert ein Archiv im ZIP-Format.
Umgebung Verwaltet Systemumgebungsvariablen.
Protokoll wird erstellt Schreibt eine Nachricht in das DSC-Ereignisprotokoll.
Paket Installiert oder entfernt ein Paket.
Registry Verwaltet den Registrierungsschlüssel eines Knotens (mit Ausnahme von HKEY-Benutzern).
Script Führt PowerShell-Befehle auf einem Knoten aus.
Service Verwaltet Windows-Dienste.
User Verwaltet lokale Benutzer auf einem Knoten.
WindowsFeature Fügt eine Rolle oder ein Feature auf einem Knoten hinzu oder entfernt sie/es.
WindowsOptionalFeature Fügt eine optionale Rolle oder ein Feature auf einem Knoten hinzu oder entfernt sie/es.
WindowsProcess Verwaltet einen Windows-Prozess.

Für komplexere Ressourcen wie die Active Directory-Integration, verwenden Sie das DSC-Ressourcenkit, das monatlich aktualisiert wird. Einen Link zum DSC-Ressourcenkit finden Sie in der Lerneinheit „Zusammenfassung“ am Ende dieses Moduls.

Die Ressource, die Sie konfigurieren möchten, muss bereits Teil der VM oder des VM-Images sein. Andernfalls schlägt die Kompilierung und Ausführung des Auftrags fehl.

Anatomie eines DSC-Codeblocks

Ein DSC-Codeblock enthält vier Abschnitte. Sehen Sie sich das folgende Beispiel genau an. Die Zahlen im Beispiel sind nicht Teil der Syntax. Sie werden als Kommentare bezeichnet und beziehen sich auf Abschnitte in der folgenden Diskussion.

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

Die Konfigurationssyntax umfasst die folgenden Abschnitte:

  1. Konfiguration: Der Konfigurationsblock ist der äußerste Skriptblock. Am Anfang steht das Schlüsselwort Configuration, und anschließend geben Sie einen Namen an. Im Beispiel lautet der Name der Konfiguration MyDscConfiguration.

    Der Konfigurationsblock beschreibt die gewünschte Konfiguration. Sie können sich den Konfigurationsblock wie eine Funktion vorstellen, nur dass er anstelle des Installationscodes eine Beschreibung der zu installierenden Ressourcen enthält.

    Ein Konfigurationsblock kann wie eine PowerShell-Funktion Parameter enthalten. Beispielsweise können Sie den Knotennamen parametrisieren.

    Configuration MyDscConfiguration {
    param
    (
        [string] $ComputerName='localhost'
    )
    
    Node $ComputerName {
        ...
    }
    
  2. Node: Sie können mehrere Knotenblöcke einfügen. Der Knotenblock bestimmt die Namen von MOF-Dateien, die beim Kompilieren der Konfiguration generiert werden. Der Knotenname localhost generiert beispielsweise nur eine Datei localhost.mof, aber Sie können diese MOF-Datei an einen beliebigen Server senden. Wenn Sie mehrere Knotennamen verwenden, werden mehrere MOF-Dateien generiert.

    Verwenden Sie die Arraynotation im Knotenblock, um mehrere Hosts als Ziele zu verwenden. Beispiel:

    Node @('WEBSERVER1', 'WEBSERVER2', 'WEBSERVER3')
    
  3. Ressource: Sie können einen oder mehrere Ressourcenblöcke verwenden, um die zu konfigurierenden Ressourcen anzugeben. In diesem Fall verweist ein einziger Ressourcenblock auf die WindowsFeature-Ressource. Mit der WindowsFeature-Ressource wird hier sichergestellt, dass die Windows-Funktion Web-Server installiert ist.

  4. MyDscConfiguration: Hiermit wird der MyDscConfiguration-Block aufgerufen. Dies entspricht dem Ausführen einer Funktion. Wenn Sie einen Konfigurationsblock ausführen, wird dieser in ein MOF-Dokument (Managed Object Format) kompiliert. MOF ist eine kompilierte Sprache, die von der Desktop Management Task Force erstellt wurde und auf Interface Definition Language basiert.

    Für jeden im DSC-Skript aufgeführten Knoten wird eine MOF-Datei in dem Ordner erstellt, den Sie mit dem -OutputPath-Parameter angegeben haben.

Konfigurationsdaten in einem DSC-Skript

In einem Konfigurationsdatenblock können Sie Daten bereitstellen, die möglicherweise vom Konfigurationsprozess benötigt werden. Sie können diese Daten auf benannte Knoten oder global auf alle Knoten anwenden.

Ein Konfigurationsdatenblock ist ein benannter Block, der ein Array von Knoten enthält. Das Array muss den Namen AllNodes tragen. Im Array AllNodes geben Sie die Daten für einen Knoten mithilfe der Variablen NodeName an.

Wenn Sie das vorherige Szenario verwenden, nehmen wir an, dass Sie auf dem Webserver, der auf den einzelnen Knoten installiert ist, die SiteName-Eigenschaft auf unterschiedliche Werte festlegen möchten. Sie könnten einen Konfigurationsdatenblock wie folgt definieren:

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

Wenn Sie für alle Knoten denselben Wert für eine Eigenschaft festlegen möchten, geben Sie NodeName = "*" im Array AllNodes an.

Sichere Anmeldeinformationen in einem DSC-Skript

Ein DSC-Skript benötigt möglicherweise Anmeldeinformationen für den Konfigurationsprozess. Vermeiden Sie es, Anmeldeinformationen in Ihrem Quellcode-Verwaltungstool in Klartext anzugeben. Stattdessen können DSC-Konfigurationen in Azure Automation auf in einem PSCredential-Objekt gespeicherte Anmeldeinformationen verweisen. Mit dem Typ PSCredential können Sie einen Parameter für das DSC-Skript definieren. Rufen Sie die Benutzeranmeldeinformationen ab, verwenden Sie diese Anmeldeinformationen, um ein neues PSCredential-Objekt zu erstellen, und übergeben Sie dieses Objekt als Parameter an das Skript, bevor Sie das Skript ausführen.

Anmeldeinformationen werden in MOF-Dateien nicht standardmäßig verschlüsselt, sondern als Klartext angezeigt. Zum Verschlüsseln von Anmeldeinformationen verwenden Sie in Ihren Konfigurationsdaten ein Zertifikat. Der private Schlüssel des Zertifikats muss auf dem Knoten vorliegen, auf den Sie die Konfiguration anwenden möchten. Zertifikate werden über den lokalen Konfigurations-Manager (LCM) des Knotens konfiguriert.

Ab PowerShell 5.1 werden MOF-Dateien auf dem Knoten im Ruhezustand verschlüsselt. Alle Anmeldeinformationen werden während der Übertragung mit WinRM verschlüsselt.

Pushen der Konfiguration zu einem Knoten

Nachdem Sie eine kompilierte MOF-Datei für eine Konfiguration erstellt haben, können Sie diese an einen Knoten pushen, indem Sie das Cmdlet Start-DscConfiguration ausführen. Wenn Sie den Pfad zum Verzeichnis hinzufügen, werden alle MOF-Dateien auf den Knoten angewendet, die in diesem Verzeichnis gefunden werden:

Start-DscConfiguration -path D:\

Dieser Schritt entspricht dem Pushmodus, den Sie in der vorherigen Lerneinheit kennen gelernt haben.

Pullen der Konfiguration für Knoten

Wenn Sie über Hunderte VMs in Azure verfügen, ist der Pullmodus besser geeignet als der Pushmodus.

Sie können ein Azure Automation-Konto so konfigurieren, dass es als Pulldienst fungiert. Laden Sie einfach die Konfiguration in das Azure Automation-Konto hoch, und registrieren Sie dann Ihre virtuellen Computer mit diesem Konto.

Bevor Sie Ihre Konfiguration kompilieren, importieren Sie alle PowerShell-Module, die der DSC-Prozess benötigt, in Ihr Automation-Konto. Diese Module definieren, wie die Aufgabe ausgeführt wird, um den gewünschten Zustand zu erreichen.

Beispielsweise hat ein DSC-Skript in der vorherigen Lerneinheit das PowerShell-Modul xSmbShare verwendet, um DSC anzuweisen, wie der Zustand einer Dateifreigabe geprüft werden soll. DSC ruft Module automatisch per Pull aus dem Automation-Konto auf den Knoten ab.

Im folgenden Diagramm wird gezeigt, wie Azure Automation State Configuration eingerichtet wird. Diese Schritte werden in der nächsten Lerneinheit näher erläutert.

Abbildung mit den Schritten zum Einrichten von DSC

Der LCM auf der VM fragt Azure Automation nach 15 Minuten standardmäßig auf Änderungen an der DSC-Konfigurationsdatei ab. Alle Änderungen an den VMs werden in der Konfiguration des gewünschten Zustands aufgezeichnet. Wenn Sie eine Konfiguration ändern, können Sie sie in das Automation-Konto hochladen, damit die VMs automatisch neu konfiguriert werden.

Im folgenden Diagramm werden die Schritte des LCM zum Verwalten des gewünschten Zustands auf der VM veranschaulicht.

Abbildung, die zeigt, wie die VM Azure Automation abfragt

Ihr Automation-Konto verarbeitet die Anmeldeinformationen nativ. Diese Verwaltung reduziert die Komplexität der Sicherung und Arbeit mit Anmeldeinformationen.