Konfiguration und Dateien des gewünschten PowerShell-Status: Teil 1. Konfigurieren des DSC Pull-Servers für die Arbeit mit der SQL-Datenbank



Die PowerShell Desired State Configuration (DSC) erleichtert die Bereitstellung und Konfiguration des Betriebssystems, der Serverrollen und Anwendungen, wenn Sie über Hunderte von Servern verfügen.

Bei Verwendung von DSC vor Ort, d. H. Nicht in MS Azure gibt es einige Nuancen. Sie sind besonders greifbar, wenn die Organisation groß ist (von 300 Arbeitsstationen und Servern) und die Welt der Container noch nicht geöffnet hat:

  • Es gibt keine vollständigen Berichte über den Status von Systemen. Wenn die erforderliche Konfiguration auf einigen Servern nicht angewendet wurde, wissen wir ohne diese Berichte nichts darüber. Es ist ziemlich schwierig, Informationen vom eingebauten Berichtsserver abzurufen, und für eine große Anzahl von Hosts ist dies auch eine lange Zeit.
  • Es gibt keine Skalierbarkeit und Fehlertoleranz. Es ist unmöglich, eine Farm von Polling-DSC-Webservern zu erstellen, die über eine einzige fehlertolerante Datenbank und ein gemeinsames Repository mit Konfigurationsdateien, Modulen und Registrierungsschlüsseln verfügt.

Heute werde ich Ihnen erklären, wie Sie das erste Problem lösen und die Daten für die Berichterstellung erhalten. Alles wäre einfacher, wenn SQL als Datenbank verwendet werden könnte. MS verspricht integrierte Unterstützung nur in Windows Server 2019 oder im Build Windows Server 1803. Außerdem können keine Daten mit dem OleDB-Anbieter abgerufen werden, da der DSC-Server einen benannten Parameter verwendet, der von OleDbCommand nicht vollständig unterstützt wird.

Ich habe diesen Weg gefunden: Für diejenigen, die Windows Server 2012 und 2016 verwenden, können Sie die Verwendung der SQL-Datenbank als Backend für den Polling-DSC-Server konfigurieren . Erstellen Sie dazu einen „Proxy“ in Form einer MDB-Datei mit verknüpften Tabellen, die von Clientberichten empfangene Daten an die SQL Server-Datenbank umleitet.

Hinweis: Für Windows Server 2016 müssen Sie AccessDatabaseEngine2016x86 verwenden , da Microsoft.Jet.OLEDB.4.0 nicht mehr unterstützt wird.

Ich werde nicht auf den Bereitstellungsprozess des Polling-DSC-Servers eingehen, er wird hier sehr gut beschrieben. Ich nehme nur ein paar Punkte zur Kenntnis. Wenn wir den Polling-DSC auf demselben Webserver wie WSUS oder Kaspersky Security Center bereitstellen, müssen im Konfigurationserstellungsskript die folgenden Parameter geändert werden:

  1. UseSecurityBestPractices     = $false 

    Andernfalls wird TLS 1.0 deaktiviert und Sie können keine Verbindung zur SQL-Datenbank herstellen. Kaspersky Security Center funktioniert auch nicht (das Problem sollte in Kaspersky Security Center v11 behoben sein).
  2.  Enable32BitAppOnWin64   = $true 

    Wenn Sie diese Änderung nicht vornehmen, können Sie den AppPool DSC-Server unter IIS nicht mit WSUS starten.
  3. Deaktivieren Sie bei der Installation eines DSC-Servers mit WSUS das statische und dynamische Caching für die DSC-Site.

Fahren wir mit dem Einrichten des DSC-Servers für die Verwendung der SQL-Datenbank fort.

Erstellen einer SQL-Datenbank


  1. Erstellen Sie eine leere SQL-Datenbank mit dem Namen DSC.



  2. Erstellen Sie ein Konto, um eine Verbindung zu dieser Datenbank herzustellen. Stellen Sie vorab sicher, dass die Authentifizierung von Windows- und SQL-Konten auf dem SQL Server aktiviert ist.



  3. Wechseln Sie zum Abschnitt Benutzerzuordnung. Wählen Sie eine Datenbank aus, in diesem Fall DSC. Wir geben die Rechte des Inhabers der Datenbank.

  4. Fertig.


Erstellen eines Schemas für eine DSC-Datenbank


Es gibt zwei Möglichkeiten, ein Schema für eine DSC-Datenbank zu erstellen:

  • unabhängig ü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 Sie Daten aus leeren Geräten.mdb als Teil des PS-Moduls PSDesiredStateConfiguration über den SQL-Datenimport-Assistenten.

    Devices.mdb, mit dem wir arbeiten werden, befindet sich unter C: \ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ Modules \ PSDesiredStateConfiguration \ PullServer.

  1. Führen Sie zum Importieren von Daten den SQL Server-Import- und Exportassistenten aus.

  2. Wir wählen aus, wo wir die Daten sammeln möchten - in unserem Fall handelt es sich um eine Microsoft Access-Datenbank. Klicken Sie auf Weiter.

  3. Wählen Sie die Datei aus, aus der wir das Schema importieren.

  4. Wir geben an, wohin importiert werden soll - wir haben diese SQL-Datenbank.

  5. Wir wählen den SQL Server (Servername) und die Datenbank aus, in die wir die Daten importieren (Datenbank).

  6. Wir wählen die Option Daten aus einer oder mehreren Tabellen oder Ansichten kopieren (Daten aus Tabellen oder Ansichten kopieren).

  7. Wir wählen die Tabellen aus, aus denen wir das Datenbankschema importieren wollen.

  8. Aktivieren Sie Sofort ausführen und klicken Sie auf Fertig stellen.

  9. Fertig.

  10. Daher sollten Tabellen in der DSC-Datenbank angezeigt werden.


Konfigurieren einer MDB-Proxy-Datei


Erstellen einer ODBC-Verbindung zum SQL Server. Es wird davon ausgegangen, dass MS Access nicht mit DSC auf dem Server installiert ist. Daher wird die Konfiguration von database.dbb auf einem Zwischenhost mit installiertem MS Access durchgeführt.

Erstellen Sie eine System-ODBC-Verbindung zum SQL Server (die Bittiefe der Verbindung muss mit der Bittiefe von MS Access - 64 oder 32 übereinstimmen). Es kann erstellt werden mit:
- Powershell-Cmdlet:

 Add-OdbcDsn –Name DSC –DriverName 'SQL Server' –Platform '<64-bit or 32-bit>' –DsnType System –SetPropertyValue @('Description=DSC Pull Server',"Server=<Name of your SQL Server>",'Trusted_Connection=yes','Database=DSC') –PassThru 

- oder manuell mit dem Verbindungsassistenten:

  1. Öffnen Sie die Verwaltung. Wir wählen ODBC-Datenquellen abhängig von der installierten Version von MS Access aus. Wechseln Sie zur Registerkarte System-DSN und erstellen Sie eine Systemverbindung (Hinzufügen).

  2. Wir geben an, dass wir eine Verbindung zum SQL Server herstellen werden. Klicken Sie auf Fertig stellen.

  3. Geben Sie den Namen und den Server an, zu dem eine Verbindung hergestellt werden soll. Dann muss auf dem DSC-Server eine Verbindung mit denselben Parametern hergestellt werden.

  4. Wir geben an, dass wir für die Verbindung zum SQL Server die zuvor erstellte Anmeldung mit dem Namen DSC verwenden.

  5. Geben Sie die Datenbank in den DSC-Verbindungseinstellungen an.

  6. Klicken Sie auf Fertig stellen.

  7. Bevor Sie die Einstellungen vornehmen, überprüfen Sie, ob die Verbindung funktioniert (Testdatenquelle).

  8. Fertig.


Erstellen der Datenbank device.mdb in MS Access. Wir starten MS Access und erstellen eine leere Datenbank namens device.mdb.



  1. Gehen Sie zur Registerkarte Externe Daten und klicken Sie auf die ODBC-Datenbank. Wählen Sie im angezeigten Fenster die Option Verknüpfte Tabelle für die Kommunikation mit der Datenquelle erstellen.

  2. Wählen Sie im neuen Fenster die Registerkarte Maschinendatenquelle und klicken Sie auf OK. Geben Sie im neuen Fenster die Anmeldeinformationen für die Verbindung zum SQL Server ein.

  3. Wir wählen die Tabellen aus, die verknüpft werden müssen. Wir aktivieren das Kontrollkästchen Passwort speichern und klicken auf OK. Das Passwort sollte jedes Mal für alle drei Tabellen gespeichert werden.

  4. In den Indizes müssen Sie Folgendes auswählen:
    - TargetName für die Tabelle dbo_Devices;



    - NodeName oder IPAddress für dbo_RegistrationData;



    - NodeName oder IPAddress für dbo_StatusReport.

  5. Benennen Sie die Tabellen in MS Access um: Entfernen Sie das Präfix dbo_, damit DSC sie verwenden kann.

  6. Fertig.

  7. Speichern Sie die Datei und schließen Sie MS Access. Kopieren Sie nun die resultierende Geräte.mdb auf den DSC-Server (standardmäßig unter C: \ Programme \ WindowsPowershell \ DSCService) und ersetzen Sie sie durch die vorhandene (falls vorhanden).

Konfigurieren eines DSC-Servers für die Verwendung von SQL


  1. Wir kehren zum DSC-Server zurück. Um mit unserer Proxy-Datei eine Verbindung zum SQL Server herzustellen, erstellen Sie eine neue ODBC-Verbindung auf dem DSC-Server. Der Name, die Bittiefe und die Verbindungseinstellungen sollten mit denen beim Erstellen der MDB-Datei übereinstimmen. Hier können Sie die bereits konfigurierte leere Geräte.mdb kopieren.
  2. Um device.mdb zu verwenden, müssen Sie Änderungen an der web.config des abfragenden DSC-Servers vornehmen (standardmäßig C: \ inetpub \ PSDSCPullServer \ web.config):


- für Windows Server 2012

 <add key="dbprovider" value="System.Data.OleDb"> <add key="dbconnectionstr" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\WindowsPowerShell\DscService\Devices.mdb;"> 

- für Windows Server 2016

 <add key="dbprovider" value="System.Data.OleDb"> <add key="dbconnectionstr" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\WindowsPowerShell\DscService\Devices.mdb;"> 


Damit ist die Einrichtung des DSC-Servers abgeschlossen.

Überprüfen des Zustands des DSC-Servers


  1. Überprüfen Sie, ob der DSC-Server über einen Webbrowser zugänglich ist.

  2. Überprüfen wir nun, ob der Polling-DSC-Server ordnungsgemäß funktioniert. Zu diesem Zweck verfügt das Modul xPSDesiredStateConfiguration über ein Skript pullserversetuptests.ps1. Bevor Sie dieses Skript ausführen, müssen Sie das Powershell-Modul mit dem Namen Pester installieren. Installieren Sie es Install-Module -Name Pester.
  3. Öffnen Sie C: \ Programme \ WindowsPowerShell \ Modules \ xPSDesiredStateConfiguration \ <Modulversion> \ DSCPullServerSetup \ PullServerDeploymentVerificationTest (im Beispiel Version 8.0.0.0.0).

  4. Öffnen Sie PullServerSetupTests.ps1 und überprüfen Sie den Pfad zur web.config des DSC-Servers. Rot hat den Pfad zu web.config markiert, der das Skript überprüft. Ändern Sie gegebenenfalls diesen Pfad.

  5. Führen Sie pullserversetuptests.ps1 aus
    Invoke-Pester. \ PullServerSetupTests.ps1
    Alles arbeitet.

  6. In SQL Management Studio sehen wir, dass die verwalteten Hosts Berichte an den DSC-Berichtsserver senden und die Daten an die DSC-Datenbank auf dem SQL Server gesendet werden.


Das ist alles. In den folgenden Artikeln möchte ich erläutern, wie Berichte zu den empfangenen Daten erstellt werden, und Fragen zur Fehlertoleranz und Skalierbarkeit ansprechen.

Source: https://habr.com/ru/post/de452064/


All Articles