
Die PowerShell Desired State Configuration (DSC) vereinfacht erheblich die Bereitstellung und Konfiguration von Betriebssystemen, Serverrollen und Anwendungen, insbesondere wenn Sie hunderte von Servern haben.
Bei der Verwendung von DSC vor Ort, also nicht in MS Azure, gibt es jedoch einige Punkte zu beachten. Diese sind besonders relevant, wenn die Organisation groß ist (ab 300 Arbeitsplätzen und Servern) und sie die Welt der Container noch nicht eröffnet hat:
- Es fehlen vollständige Systemstatusberichte. Wenn die erforderliche Konfiguration auf bestimmten Servern nicht angewendet wurde, werden wir ohne diese Berichte nichts davon erfahren. Die Informationen vom integrierten Reporting-Server sind ziemlich schwer zu erhalten, und bei einer großen Anzahl von Hosts dauert es noch länger.
- Es fehlt an Skalierbarkeit und Ausfallsicherheit. Es ist nicht möglich, eine Farm von abfragenden DSC-Webservern aufzubauen, die eine gemeinsame ausfallsichere Datenbank und einen gemeinsamen Speicher für mof-Dateien von Konfigurationen, Modulen und Registrierungsschlüsseln haben.
Heute werde ich erklären, wie man das erste Problem lösen kann, um Daten für den Aufbau von Berichten zu erhalten. Alles wäre einfacher, wenn wir SQL als Datenbank verwenden könnten. MS eingebauten Support nur in Windows Server 2019 oder in Build Windows Server 1803. Datenabruf unter Verwendung des OleDB-Anbieters ist ebenfalls , da der DSC-Server einen benannten Parameter verwendet, der von OleDbCommand nicht vollständig unterstützt wird.
Ich habe folgendermaßen vorgehen: Für diejenigen, die Windows Server 2012 und 2016 verwenden, kann eine SQL-Datenbank als Backend für den Abfragenden DSC-Server genutzt werden. Dazu erstellen wir ein "Proxy" in Form einer .mdb-Datei mit verknüpften Tabellen, die die von Kundenberichten erhaltenen Daten an die SQL-Server-Datenbank umleiten.
Hinweis: Für Windows Server 2016 muss verwendet werden, da Microsoft.Jet.OLEDB.4.0 nicht mehr unterstützt wird.
Ich werde nicht ausführlich auf den Prozess der Bereitstellung des abfragenden DSC-Servers eingehen, da dieser sehr gut beschrieben ist . Ich möchte nur einige Punkte hervorheben. Wenn wir den abfragenden DSC auf demselben Webserver wie WSUS oder Kaspersky Security Center bereitstellen, müssen im Konfigurationsskript folgende Parameter geändert werden:
UseSecurityBestPractices = $falseAndernfalls wird TLS 1.0 deaktiviert, und Sie können sich nicht mit der SQL-Datenbank verbinden. Kaspersky Security Center wird ebenfalls nicht funktionieren (das Problem sollte in Kaspersky Security Center v11 gelöst sein).
Enable32BitAppOnWin64 = $trueWenn diese Änderung nicht vorgenommen wird, kann der AppPool des DSC-Servers auf IIS mit WSUS nicht gestartet werden.
- Deaktivieren Sie bei der Installation des DSC-Servers zusammen mit WSUS das statische und dynamische Caching für die DSC-Website.
Gehen wir zur Konfiguration des DSC-Servers für die Verwendung mit SQL-Datenbanken über.
Erstellung einer SQL-Datenbank
- Wir erstellen eine leere SQL-Datenbank mit dem Namen DSC.


- Wir erstellen ein Konto zum Herstellen einer Verbindung mit dieser Datenbank. Stellen Sie im Voraus sicher, dass die Authentifizierung sowohl für Windows- als auch für SQL-Konten auf dem SQL-Server aktiviert ist.


- Gehen Sie zum Bereich Benutzerzuordnung. Wählen Sie die Datenbank, in diesem Fall – DSC. Gewähren Sie die Berechtigungen des Datenbankbesitzers.

- Fertig.

Erstellung eines Schemas für die DSC-Datenbank
Das Schema für die DSC-Datenbank kann auf zwei Arten erstellt werden:
- manuell über ein Skript in TSQL
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Devices]( [TargetName] [nvarchar](255) NOT NULL, [ConfigurationID] [nvarchar](255) NOT NULL, [ServerCheckSum] [nvarchar](255) NOT NULL, [TargetCheckSum] [nvarchar](255) NOT NULL, [NodeCompliant] [bit] NOT NULL, [LastComplianceTime] [datetime] NULL, [LastHeartbeatTime] [datetime] NULL, [Dirty] [bit] NOT NULL, [StatusCode] [int] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[RegistrationData]( [AgentId] [nvarchar](255) NOT NULL, [LCMVersion] [nvarchar](255) NULL, [NodeName] [nvarchar](255) NULL, [IPAddress] [nvarchar](255) NULL, [ConfigurationNames] [nvarchar](max) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO CREATE TABLE [dbo].[StatusReport]( [JobId] [nvarchar](50) NOT NULL, [Id] [nvarchar](50) NOT NULL, [OperationType] [nvarchar](255) NULL, [RefreshMode] [nvarchar](255) NULL, [Status] [nvarchar](255) NULL, [LCMVersion] [nvarchar](50) NULL, [ReportFormatVersion] [nvarchar](255) NULL, [ConfigurationVersion] [nvarchar](255) NULL, [NodeName] [nvarchar](255) NULL, [IPAddress] [nvarchar](255) NULL, [StartTime] [datetime] NULL, [EndTime] [datetime] NULL, [Errors] [nvarchar](max) NULL, [StatusData] [nvarchar](max) NULL, [RebootRequested] [nvarchar](255) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO - Importieren von Daten aus der leeren devices.mdb im Rahmen des PS-Moduls PSDesiredStateConfiguration über den SQL-Datenimport-Assistenten.
Die devices.mdb, mit der wir arbeiten werden, befindet sich in C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PullServer.
- Um die Daten zu importieren, starten wir den SQL Server Import- und Exportassistenten.

- Wir wählen aus, woher wir die Daten beziehen – in unserem Fall ist das die Microsoft Access-Datenbank. Klicken Sie auf Weiter.

- Wir wählen die Datei aus, aus der wir das Schema importieren.

- Wir geben an, wo die Daten importiert werden sollen – bei uns ist das die SQL-Datenbank.

- Wählen Sie den SQL-Server (Server Name) und die Datenbank, in die wir die Daten importieren möchten (DataBase).

- Wählen Sie die Option Kopieren Sie Daten aus einer oder mehreren Tabellen oder Ansichten (Copy data from one or more tables or views).

- Wählen Sie die Tabellen aus, aus denen wir das Schema der Datenbank importieren möchten.

- Setzen Sie das Häkchen bei Sofort ausführen (Run Immediately) und klicken Sie auf Fertigstellen (Finish).

- Fertig.

- In der DSC-Datenbank sollten nun die Tabellen erscheinen.

Konfiguration der .mdb „Proxy“-Datei
Erstellung einer ODBC-Verbindung zu SQL Server. Es wird angenommen, dass MS Access nicht auf dem Server mit DSC installiert ist, daher wird die Konfiguration von databases.mdb auf einem Zwischenhost mit installiertem MS Access durchgeführt.
Wir erstellen eine systemweite ODBC-Verbindung zu SQL-Server (die Bitrate der Verbindung muss mit der Bitrate von MS Access übereinstimmen – 64 oder 32). Diese kann erstellt werden durch:
— PowerShell-Cmdlet:
Add-OdbcDsn –Name DSC –DriverName 'SQL Server' –Platform '' –DsnType System –SetPropertyValue @('Description=DSC Pull Server',"Server=", 'Trusted_Connection=yes', 'Database=DSC') –PassThru— oder manuell mit dem Verbindungsassistenten:
- Öffnen Sie die Systemsteuerung (Administrative tools). Wählen Sie ODBC-Datenquellen entsprechend der Version von MS Access aus. Gehen Sie zur Registerkarte System DSN und erstellen Sie eine systemweite Verbindung (Hinzufügen/Add).

- Wir geben an, dass wir uns mit dem SQL-Server verbinden werden. Klicken Sie auf Fertigstellen.

- Wir geben den Namen und den Server für die Verbindung an. Danach muss eine Verbindung mit denselben Parametern auf dem DSC-Server erstellt werden.

- Wir geben an, dass für die Verbindung zum SQL-Server ein von uns zuvor erstelltes Benutzerkonto mit dem Namen DSC verwendet wird.

- Wir geben die Datenbank in den Verbindungseinstellungen des DSC an.

- Klicken Sie auf Fertigstellen.

- Überprüfen Sie vor Abschluss der Einrichtung, ob die Verbindung funktioniert (Datenquelle testen).

- Fertig.

Erstellung der Datenbank devices.mdb in MS Access. Starten Sie MS Access und erstellen Sie eine leere Datenbank mit dem Namen devices.mdb.

- Gehen Sie zum Tab Externe Daten, klicken Sie auf ODBC-Datenbank. Wählen Sie im erscheinenden Fenster die Option Erstellen Sie eine verbundene Tabelle, um eine Verbindung mit der Datenquelle herzustellen.

- Wählen Sie im neuen Fenster den Tab Maschinen-Datenquelle und klicken Sie auf OK. Geben Sie im neuen Fenster die Anmeldedaten zur Verbindung mit dem SQL-Server ein.

- Wählen Sie die Tabellen aus, die verknüpft werden sollen. Aktivieren Sie das Kontrollkästchen Passwort speichern und klicken Sie auf OK. Das Passwort muss für alle drei Tabellen jedes Mal gespeichert werden.

- In den Indizes müssen die folgenden ausgewählt werden:
— TargetName für die Tabelle dbo_Devices;
— NodeName oder IPAddress für dbo_RegistrationData;
— NodeName oder IPAddress für dbo_StatusReport.
- Wir benennen die Tabellen in MS Access um, indem wir das Präfix dbo_ entfernen, damit DSC sie verwenden kann.

- Fertig.

- Wir speichern die Datei und schließen MS Access. Jetzt kopieren wir die erhaltene devices.mdb auf den DSC-Server (standardmäßig in C:Program FilesWindowsPowershellDSCService) und ersetzen die vorhandene Datei (sofern vorhanden).
Konfiguration des DSC-Servers für die Verwendung von SQL
- Wir kehren zum DSC-Server zurück. Um uns mit dem SQL-Server über unsere Proxy-Datei zu verbinden, erstellen wir eine neue ODBC-Verbindung auf dem DSC-Server. Der Name, die Bit-Version und die Verbindungseinstellungen sollten identisch sein mit denen, die beim Erstellen der MDB-Datei verwendet wurden. Wir können die bereits konfigurierte leere devices.mdb von hier kopieren.
- Um devices.mdb zu verwenden, müssen Änderungen an der web.config des abfragenden DSC-Servers vorgenommen werden (standardmäßig – C:inetpubPSDSCPullServerweb.config):
— für Windows Server 2012
— für Windows Server 2016
Damit ist die Einrichtung des DSC-Servers abgeschlossen.
Überprüfung der Funktionsfähigkeit des DSC-Servers
- Wir überprüfen, ob der DSC-Server über den Webbrowser zugänglich ist.

- Jetzt überprüfen wir, ob der Abfrage-Server DSC korrekt funktioniert. Dazu gibt es im Modul xPSDesiredStateConfiguration ein Skript namens pullserversetuptests.ps1. Vor dem Ausführen dieses Skripts muss das PowerShell-Modul mit dem Namen Pester installiert werden. Wir installieren es mit Install-Module -Name Pester.
- Öffnen Sie C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfiguration<Modulversion>DSCPullServerSetupPullServerDeploymentVerificationTest (im Beispiel Version 8.0.0.0.0).

- Öffnen Sie PullServerSetupTests.ps1 und überprüfen Sie den Pfad zur web.config des DSC-Servers. Ich habe den Pfad zur web.config, der vom Skript überprüft wird, rot hervorgehoben. Bei Bedarf ändern wir diesen Pfad.

- Führen Sie pullserversetuptests.ps1 aus.
Invoke-Pester .PullServerSetupTests.ps1
Alles funktioniert.
- Im SQL Management Studio sehen wir, dass die verwalteten Hosts Berichte an den DSC-Berichtserver senden und die Daten in die DSC-Datenbank auf dem SQL-Server gelangen.

Das war's. In den nächsten Artikeln plane ich, zu erläutern, wie mit den gewonnenen Daten Berichte erstellt werden können, und ich werde auf Fragen zur Ausfallsicherheit und Skalierbarkeit eingehen.
Quelle: habr.com





































