
PowerShell Desired State Configuration (DSC) vereenvoudigt het implementeren en configureren van besturingssystemen, serverrollen en applicaties aanzienlijk, vooral wanneer u honderden servers heeft.
Maar bij het gebruik van DSC on-premises, dat wil zeggen niet in MS Azure, ontstaan er een paar aandachtspunten. Deze zijn vooral voelbaar als de organisatie groot is (meer dan 300 werkstations en servers) en men de wereld van containers nog niet heeft geopend:
- Er zijn geen volledige rapportages over de systeemstatussen. Als de nodige configuratie niet op bepaalde servers is toegepast, komen we daar zonder deze rapporten niet achter. Het verkrijgen van informatie van de ingebouwde rapportageserver is vrij moeilijk, en voor een groot aantal hosts duurt het ook nog eens lang.
- Er is geen schaalbaarheid en fouttolerantie. Het is niet mogelijk om een farm van DSC-vraagservers op te bouwen die een gezamenlijke fouttolerante database en een gemeenschappelijke opslag voor mof-configuratiebestanden, modules en registratiesleutels hebben.
Vandaag zal ik uitleggen hoe we het eerste probleem kunnen oplossen en gegevens kunnen verkrijgen voor het opstellen van rapportages. Het zou veel eenvoudiger zijn als we SQL als database konden gebruiken. MS ondersteuning alleen in Windows Server 2019 of in de build van Windows Server 1803. Gegevens ophalen met behulp van de OleDB-provider is ook , aangezien de DSC-server een benoemde parameter gebruikt die niet volledig wordt ondersteund door OleDbCommand.
Ik heb een methode gevonden: voor degenen die Windows Server 2012 en 2016 gebruiken, kan men de SQL-database gebruiken als backend voor de DSC-vraagserver. Hiervoor creëren we een 'proxy' in de vorm van een .mdb-bestand met gekoppelde tabellen, dat gegevens van klantrapporten doorstuurd naar de SQL-server.
Opmerking: voor Windows Server 2016 moet men , omdat Microsoft.Jet.OLEDB.4.0 niet langer wordt ondersteund.
Ik zal niet diep ingaan op het proces van het implementeren van de DSC-vraagserver, aangezien dit zeer goed is beschreven . Ik zal slechts een paar punten benadrukken. Als we de DSC-vraagserver op dezelfde webserver met WSUS of Kaspersky Security Center implementeren, moeten we de volgende parameters in het configuratiescript wijzigen:
UseSecurityBestPractices = $falseAnders wordt TLS 1.0 uitgeschakeld en kunt u geen verbinding maken met de SQL-database. Kaspersky Security Center zal ook niet werken (het probleem moet worden opgelost in Kaspersky Security Center v11).
Enable32BitAppOnWin64 = $trueAls deze wijziging niet wordt aangebracht, kan de AppPool van de DSC-server op IIS met WSUS niet worden gestart.
- Bij de installatie van de DSC-server samen met WSUS, schakelt u zowel de statische als dynamische caching voor de DSC-site uit.
Laten we de DSC-server configureren voor gebruik met SQL-database.
SQL-database aanmaken
- We maken een lege SQL-database met de naam DSC aan.


- We creëren een account voor verbinding met deze database. Controleer eerst of de authenticatie van accounts op de SQL-server is ingeschakeld, zowel voor Windows als SQL.


- We gaan naar het gedeelte Gebruikerstoewijzing. We kiezen de database, in dit geval – DSC. We geven eigenaarstoegankelijkheid aan de database.

- Klaar.

Een schema aanmaken voor de DSC-database
Het schema voor de DSC-database kan op twee manieren worden aangemaakt:
- zelfstandig, via een TSQL-script
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 - gegevens importeren uit een lege devices.mdb in het PS-module PSDesiredStateConfiguration via de SQL Import Wizard.
Devices.mdb, waarmee we gaan werken, bevindt zich in C:WindowsSysWOW64WindowsPowerShellv1.0ModulesPSDesiredStateConfigurationPullServer.
- Om gegevens te importeren starten we de SQL Server Import and Export Wizard.

- We kiezen waar we de gegevens vandaan halen – in ons geval is dat de Microsoft Access-database. We klikken op Volgende.

- We kiezen het bestand waarvan we het schema importeren.

- We geven aan waar we moeten importeren – dat is voor ons de SQL-database.

- We selecteren de SQL-server (Servernaam) en de database waarin we gegevens willen importeren (DataBase).

- Kies de optie Gegevens kopiëren van een of meer tabellen of weergaven.

- We selecteren de tabellen waarvan we het database-schema gaan importeren.

- Zet het vinkje bij Direct uitvoeren aan en klik op Voltooien.

- Klaar.

- Als resultaat moeten de tabellen in de DSC-database verschijnen.

Configuratie van .mdb 'proxy'-bestand
ODBC-verbinding maken met de SQL-server. Het wordt verondersteld dat MS Access niet op de server met DSC is geïnstalleerd, daarom wordt de configuratie van databases.mdb uitgevoerd op een tussenliggende host met geïnstalleerde MS Access.
We zullen een systeem ODBC-verbinding maken met de SQL-server (de bitstructuur van de verbinding moet overeenkomen met de bitstructuur van MS Access – 64 of 32). Dit kan worden gedaan met:
— PowerShell-cmdlet:
Add-OdbcDsn –Name DSC –DriverName 'SQL Server' –Platform '' –DsnType System –SetPropertyValue @('Description=DSC Pull Server',"Server=", 'Trusted_Connection=yes', 'Database=DSC') –PassThru— of handmatig, met behulp van de wizard voor verbindingen:
- Open de beheertools. Kies ODBC-datasouces afhankelijk van de versie van de geïnstalleerde MS Access. Ga naar het tabblad Systeem DSN en maak een systeembreed verbinding (Toevoegen).

- Geef aan dat we verbinding maken met de SQL-server. Klik op Voltooien.

- Geef de naam en server voor de verbinding op. Daarna moet dezelfde verbinding met dezelfde parameters op de DSC-server worden aangemaakt.

- Geef aan dat we een eerder aangemaakt login met de naam DSC gebruiken voor de verbinding met de SQL-server.

- Geef de database op in de DSC-verbindingseinstellungen,

- Klik op Voltooien.

- Controleer voor het afsluiten van de configuratie of de verbinding werkt (Test Data Source).

- Klaar.

Een database devices.mdb maken in MS Access. Start MS Access en maak een lege database met de naam devices.mdb.

- Ga naar het tabblad Externe gegevens, klik op ODBC-database. In het verschenen venster kiezen we voor Een gekoppelde tabel maken om verbinding te maken met de datasource.

- Kies in het nieuwe venster het tabblad Machine Data Source en klik op OK. Voer in het nieuwe venster de inloggegevens in voor de verbinding met de SQL-server.

- Selecteer de tabellen die moeten worden gekoppeld. Vink het vakje Wachtwoord opslaan aan en klik op OK. Het wachtwoord moet elke keer voor alle drie de tabellen worden opgeslagen.

- In de indexen moeten de volgende worden gekozen:
— TargetName voor de tabel dbo_Devices;
— NodeName of IPAddress voor dbo_RegistrationData;
— NodeName of IPAddress voor dbo_StatusReport.
- Hernoem de tabellen in MS Access, namelijk: verwijder het voorvoegsel dbo_, zodat DSC ze kan gebruiken.

- Klaar.

- Sla het bestand op en sluit MS Access. Kopieer nu de verkregen devices.mdb naar de DSC-server (standaard in C:Program FilesWindowsPowershellDSCService) en vervang het bestaande bestand (indien aanwezig).
Configuratie van de DSC-server voor gebruik met SQL.
- Laten we terugkeren naar de DSC-server. Om verbinding te maken met de SQL-server met ons proxy-bestand, creëren we een nieuwe ODBC-verbinding op de DSC-server. De naam, bitdiepte en verbindingsinstellingen moeten hetzelfde zijn als die bij het aanmaken van het MDB-bestand. We kunnen een al geconfigureerde lege devices.mdb hiervandaan kopiëren.
- Om devices.mdb te gebruiken, moeten we wijzigingen aanbrengen in de web.config van de DSC-pullserver (standaard – C:inetpubPSDSCPullServerweb.config):
— voor Windows Server 2012
— voor Windows Server 2016
Met deze instellingen is de configuratie van de DSC-server voltooid.
Controle van de functionaliteit van de DSC-server
- Laten we controleren of de DSC-server toegankelijk is via een webbrowser.

- Nu gaan we testen of de DSC-pullserver correct werkt. In de module xPSDesiredStateConfiguration is er een script pullserversetuptests.ps1. Voordat we dit script uitvoeren, moet de PowerShell-module Pester worden geïnstalleerd. We installeren het met Install-Module -Name Pester.
- Open C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfigurationDSCPullServerSetupPullServerDeploymentVerificationTest (bijvoorbeeld versie 8.0.0.0.0).

- Open PullServerSetupTests.ps1 en controleer het pad naar de web.config van de DSC-server. Het pad naar de web.config dat door het script zal worden gecontroleerd is rood gemarkeerd. Wijzig dit pad indien nodig.

- Voer pullserversetuptests.ps1 uit
Invoke-Pester .PullServerSetupTests.ps1
Alles werkt.
- In SQL Management Studio zien we dat beheerde hosts rapporten naar de DSC-rapportserver verzenden en dat de gegevens in de DSC-database op de SQL-server terechtkomen.

Dat is alles. In de volgende artikelen ben ik van plan om te bespreken hoe rapporten te maken op basis van de verkregen gegevens en zal ik enkele vragen over failover en schaalbaarheid aansteken.
Bron: habr.com





































