
PowerShell Desired State Configuration (DSC) forenkler arbejdet med implementering og konfiguration af operativsystemer, serverroller og applikationer, når du har hundredevis af servere.
Men ved brug af DSC on-premises, dvs. ikke i MS Azure, opstår der et par nuancer. De mærkes især, hvis organisationen er stor (mere end 300 arbejdsstationer og servere) og ikke har åbnet op for containerverdenen:
- Der er ingen komplette rapporter om systemernes tilstand. Hvis den ønskede konfiguration ikke er anvendt på nogle servere, får vi ikke at vide det uden disse rapporter. At få information fra den indbyggede rapportserver er ret svært, og for et stort antal værter – også lang tid.
- Der mangler skalerbarhed og fejltolerance. Det er umuligt at bygge en farm af spørgende webservere DSC, der har en fælles fejltolerant database og et fælles lager af mof-konfigurationsfiler, moduler og registreringsnøgler.
I dag vil jeg fortælle, hvordan man kan løse det første problem og få data til at bygge rapportering. Alt ville være lettere, hvis man kunne bruge SQL som databasen. MS har indbygget support kun i Windows Server 2019 eller i build Windows Server 1803. At hente data ved hjælp af OleDB-udbyder vil heller , da DSC-serveren bruger en navngivet parameter, som ikke understøttes fuldt ud af OleDbCommand.
Jeg fandt en måde: dem, der bruger Windows Server 2012 og 2016, kan brugen af en SQL-database som backend til den spørgende DSC-server. Til dette opretter vi en "proxy" i form af en .mdb-fil med tilknyttede tabeller, som vil omdirigere data indhentet fra kundernes rapporter til SQL-serverens database.
Bemærk: For Windows Server 2016 er det nødvendigt at bruge , da Microsoft.Jet.OLEDB.4.0 ikke længere understøttes.
Jeg vil ikke gå i detaljer med processen til implementering af den spørgende DSC-server, den er meget godt beskrevet . Jeg vil kun bemærke et par punkter. Hvis vi implementerer den spørgende DSC på en webserver sammen med WSUS eller Kaspersky Security Center, er det nødvendigt at ændre følgende parametre i konfigurationsskriftet:
UseSecurityBestPractices = $falseEllers vil TLS 1.0 blive deaktiveret, og du vil ikke kunne oprette forbindelse til SQL-databasen. Kaspersky Security Center vil heller ikke fungere (problemet skal løses i Kaspersky Security Center v11).
Enable32BitAppOnWin64 = $trueHvis dette ændring ikke gennemføres, kan AppPool DSC-serveren på IIS ikke startes med WSUS.
- Når du installerer DSC-serveren sammen med WSUS, skal du deaktivere statisk og dynamisk caching for DSC-webstedet.
Lad os gå videre til konfiguration af DSC-serveren til brug med SQL-database.
Oprettelse af SQL-database
- Vi opretter en tom SQL-database med navnet DSC.


- Vi opretter en konto til at forbinde til denne database. Sørg for, at SQL-serveren tillader godkendelse af både Windows- og SQL-konti.


- Vi går til afsnittet Brugerindstilling. Vælg databasen, i dette tilfælde - DSC. Giv ejerskabsrettigheder til databasen.

- Færdig.

Oprettelse af skema til DSC-database
Skemaet til DSC-databasen kan oprettes på to måder:
- selv, gennem et script på 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 - importere data fra den tomme devices.mdb som en del af PS-modulet PSDesiredStateConfiguration via SQL Import Wizard.
Devices.mdb, som vi arbejder med, findes i C:WindowsSysWOW64WindowsPowerShellv1.0ModulesPSDesiredStateConfigurationPullServer.
- For at importere data starter vi SQL Server Import and Export Wizard.

- Vi vælger, hvor vi henter data fra - i dette tilfælde en Microsoft Access-database. Klik på Næste.

- Vi vælger filen, hvorfra vi importerer skemaet.

- Vi angiver, hvor vi skal importere til - det er vores SQL-database.

- Vi vælger SQL-server (Server Name) og databasen, som vi skal importere data til (DataBase).

- Vi vælger muligheden Copy data from one or more tables or views (kopiere data fra en eller flere tabeller eller visninger).

- Vi vælger de tabeller, hvorfra vi skal importere database skemaet.

- Marker afkrydsningsfeltet Run Immediately og klik på Finish.

- Færdig.

- Som resultat skal tabellerne nu være til stede i DSC-databasen.

Indstilling af .mdb 'proxy' fil
Oprettelse af ODBC-forbindelse til SQL-server. Det antages, at MS Access ikke er installeret på serveren med DSC, derfor udføres opsætningen af databases.mdb på en mellemhost med installeret MS Access.
Vi opretter en system ODBC-forbindelse til SQL-serveren (bitdybden på forbindelsen skal matche bitdybden af MS Access – 64 eller 32). Den kan oprettes med:
— Powershell-kommandoen:
Add-OdbcDsn –Name DSC –DriverName 'SQL Server' –Platform '' –DsnType System –SetPropertyValue @('Description=DSC Pull Server',"Server=", 'Trusted_Connection=yes', 'Database=DSC') –PassThru— eller manuelt ved hjælp af forbindelsesmesteren:
- Åbn Administrative værktøjer. Vælg ODBC-datakilder afhængigt af versionen af den installerede MS Access. Gå til fanen System DSN og opret en systemforbindelse (Tilføj).

- Angiv, at vi vil oprette forbindelse til SQL-serveren. Klik på Fuldfør.

- Angiv navn og server til forbindelsen. Derudover skal en forbindelse med de samme parametre oprettes på DSC-serveren.

- Angiv, at der anvendes den login, vi tidligere har oprettet med navnet DSC, til forbindelsen til SQL-serveren.

- Angiv databasen i indstillingerne for DSC-forbindelsen.

- Klik på Fuldfør.

- Før vi afslutter opsætningen, kontrollerer vi, at forbindelsen fungerer (Test Data Source).

- Færdig.

Oprettelse af databasen devices.mdb i MS Access. Start MS Access og opret en tom database med navnet devices.mdb.

- Gå til fanen Eksterne data, klik på ODBC-database. I det fremkomne vindue vælger vi at Opret en forbundet tabel for at forbinde til datakilden.

- I det nye vindue vælger vi fanen Maskindatakilde og klikker på OK. I det nye vindue indtaster vi legitimationsoplysningerne til forbindelsen til SQL-serveren.

- Vælg de tabeller, der skal sammenkædes. Marker Gem adgangskode og klik på OK. Adgangskoden gemmes hver gang for alle tre tabeller.

- I indeksene skal følgende vælges:
— TargetName for tabellen dbo_Devices;
— NodeName eller IPAddress for dbo_RegistrationData;
— NodeName eller IPAddress for dbo_StatusReport.
- Vi omdøber tabellerne i MS Access, nemlig: fjerner præfikset dbo_, så DSC kan bruge dem.

- Færdig.

- Gem filen og luk MS Access. Nu kopierer vi den opnåede devices.mdb til DSC-serveren (som standard i C:Program FilesWindowsPowershellDSCService) og erstatter den eksisterende (hvis den er der).
Opsætning af DSC-serveren til at bruge SQL
- Vi vender tilbage til DSC-serveren. For at oprette forbindelse til SQL-serveren med vores proxy-fil, opretter vi en ny ODBC-forbindelse på DSC-serveren. Navnet, bitdybden og indstillingerne for forbindelsen skal være de samme som ved oprettelsen af MDB-filen. Du kan kopiere den allerede konfigurerede tomme devices.mdb herfra.
- For at bruge devices.mdb skal der foretages ændringer i web.config-filen for DSC-serveren (som standard – C:inetpubPSDSCPullServerweb.config):
— for Windows Server 2012
— for Windows Server 2016
Således er konfigurationen af DSC-serveren afsluttet.
Tjek af DSC-serverens funktionalitet
- Lad os kontrollere, at DSC-serveren er tilgængelig via webbrowseren.

- Nu skal vi kontrollere, om DSC-serveren fungerer korrekt. I xPSDesiredStateConfiguration-modulet findes der et script pullserversetuptests.ps1. Før du kører dette script, skal du installere PowerShell-modulet med navnet Pester. Installer det med Install-Module -Name Pester.
- Åbn C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfigurationDSCPullServerSetupPullServerDeploymentVerificationTest (i eksemplet version 8.0.0.0.0).

- Åbn PullServerSetupTests.ps1 og kontroller stien til web.config på DSC-serveren. Stien til web.config, som scriptet vil kontrollere, er fremhævet med rødt. Hvis nødvendigt, ændrer vi denne sti.

- Kør pullserversetuptests.ps1
Invoke-Pester .PullServerSetupTests.ps1
Det hele fungerer.
- I SQL Management Studio ser vi, at de administrerede værter sender rapporter til DSC-rapportserveren, og dataene kommer ind i DSC-databasen på SQL-serveren.

Det var alt. I de næste artikler planlægger jeg at forklare, hvordan man bygger rapporter baseret på de indsamlede data, og berøre emner vedrørende fejltolerance og skalerbarhed.
Kilde: habr.com





































