
PowerShell Desired State Configuration (DSC) förenklar arbetet med att distribuera och konfigurera operativsystem, serverroller och applikationer nÀr man har hundratals servrar.
Men vid anvÀndning av DSC pÄ plats, det vill sÀga inte i MS Azure, uppstÄr ett par nyanser. De kÀnns sÀrskilt om organisationen Àr stor (frÄn 300 arbetsstationer och servrar) och containers fortfarande inte har införts:
- Det finns inga fullstĂ€ndiga rapporter om systemstatus. Om önskad konfiguration inte har tillĂ€mpats pĂ„ vissa servrar, sĂ„ kommer vi inte att fĂ„ veta det utan dessa rapporter. Att fĂ„ information frĂ„n den inbyggda rapportservern Ă€r ganska svĂ„rt, och för ett stort antal vĂ€rdar â dessutom tidskrĂ€vande.
- Det saknas skalbarhet och redundans. Det gÄr inte att bygga en farm av DSC-förfrÄgningswebbservrar som har en gemensam redundansdatabas och ett gemensamt utrymme för mof-filer för konfigurationer, moduler och registreringsnycklar.
Idag kommer jag att berÀtta hur man kan lösa det första problemet och fÄ data för att skapa rapporter. Allt skulle vara enklare om man kunde anvÀnda SQL som databas. MS har inbyggt stöd endast i Windows Server 2019 eller i bygget av Windows Server 1803. Att hÀmta data med hjÀlp av OleDB-provider gÄr inte heller , eftersom DSC-servern anvÀnder ett namngivet parameter som inte fullt ut stöds av OleDbCommand.
Jag har funnit ett sÄdant sÀtt: för dem som anvÀnder Windows Server 2012 och 2016 gÄr det att anvÀnda en SQL-databas som backend för DSC-servern. För detta ÀndamÄl skapar vi en "proxy" i form av en .mdb-fil med lÀnkade tabeller, som kommer att omdirigera data som samlas in frÄn klientrapporter till SQL-serverdatabasen.
Obs: för Windows Server 2016 Àr det nödvÀndigt att anvÀnda , eftersom Microsoft.Jet.OLEDB.4.0 inte lÀngre stöds.
Jag kommer inte att gÄ in pÄ detaljer om processen att distribuera DSC-servern, den Àr mycket vÀl beskriven . Jag vill bara pÄpeka ett par punkter. Om vi distribuerar DSC-servern pÄ en webbserver tillsammans med WSUS eller Kaspersky Security Center, sÄ mÄste vi Àndra följande parametrar i konfigurationsskapande skriptet:
UseSecurityBestPractices     = $falseAnnars kommer TLS 1.0 att inaktiveras, och du kommer inte att kunna ansluta till SQL-databasen. Kaspersky Security Center kommer inte heller att fungera (problemet bör lösas i Kaspersky Security Center v11).
Enable32BitAppOnWin64   = $trueOm du inte gör denna Àndring kommer AppPool DSC-servern pÄ IIS med WSUS inte att gÄ att starta.
- Vid installation av DSC-server tillsammans med WSUS, stÀng av statisk och dynamisk cache för DSC-webbplatsen.
LÄt oss gÄ vidare med att konfigurera DSC-servern för att anvÀnda SQL-databasen.
Skapa SQL-databas
- Vi skapar en tom SQL-databas med namnet DSC.


- Vi skapar ett konto för att ansluta till denna databas. Kontrollera först att bÄde Windows- och SQL-autentisering Àr aktiverad pÄ SQL-servern.


- Vi gĂ„r till avsnittet AnvĂ€ndarmappning. VĂ€lj databasen, i det hĂ€r fallet â DSC. Ge rĂ€ttigheter till databasens Ă€gare.

- Klart.

Skapa ett schema för databasen DSC
Du kan skapa ett schema för databasen DSC pÄ tvÄ sÀtt:
- sjÀlvstÀndigt, genom en TSQL-skript
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 - importera data frÄn den tomma devices.mdb i PS-modulen PSDesiredStateConfiguration via SQL Import Wizard.
Devices.mdb, som vi kommer att arbeta med, finns i C:WindowsSysWOW64WindowsPowerShellv1.0ModulesPSDesiredStateConfigurationPullServer.
- För att importera data, kör SQL Server Import and Export Wizard.

- VĂ€lj varifrĂ„n vi ska hĂ€mta data â i vĂ„rt fall Ă€r detta Microsoft Access-databasen. Klicka pĂ„ NĂ€sta.

- VÀlj filen dÀrifrÄn vi importerar schemat.

- Ange vart vi ska importera â det Ă€r vĂ„r SQL-databas.

- VĂ€lj SQL-server (Server Name) och den databas som vi kommer att importera data till (DataBase).

- VÀlj alternativet Kopiera data frÄn en eller flera tabeller eller vyer.

- VÀlj de tabeller frÄn vilka vi ska importera databasens schema.

- Markera rutan Kör omedelbart och klicka pÄ Slutför.

- Klart.

- Som ett resultat bör tabellerna finnas i DSC-databasen.

Konfigurera .mdb "proxy"-filen
Skapa en ODBC-anslutning till SQL-servern. Det förutsÀtts att MS Access inte Àr installerat pÄ servern med DSC, sÄ instÀllningen av databases.mdb görs pÄ en mellanliggande vÀrd med installerad MS Access.
Vi skapar en system-ODBC-anslutning till SQL-servern (anslutningens bitdjup mĂ„ste matcha MS Access bitdjup â 64 eller 32). Detta kan göras med:
â PowerShell cmdlet:
Add-OdbcDsn âName DSC âDriverName 'SQL Server' âPlatform '' âDsnType System âSetPropertyValue @('Description=DSC Pull Server',"Server=", 'Trusted_Connection=yes', 'Database=DSC') âPassThruâ eller manuellt med hjĂ€lp av anslutningsguiden:
- Ăppna Administrativa verktyg. VĂ€lj ODBC-datakĂ€llor beroende pĂ„ versionen av installerad MS Access. GĂ„ till fliken System DSN och skapa en systemanslutning (LĂ€gg till).

- Ange att vi ska ansluta till SQL-servern. Klicka pÄ Slutför.

- Ange namn och server för anslutningen. Anslutningen med samma parametrar mÄste sedan skapas pÄ DSC-servern.

- Ange att vi anvÀnder det förhandsskapade inloggningen med namnet DSC för att ansluta till SQL-servern.

- Ange DB i instÀllningarna för DSC-anslutningen.

- Klicka pÄ Slutför.

- Innan vi avslutar instÀllningen kontrollerar vi att anslutningen fungerar (Testa datakÀlla).

- Klart.

Skapa databasen devices.mdb i MS Access. Starta MS Access och skapa en tom databas med namnet devices.mdb.

- GÄ till fliken Externa data, klicka pÄ ODBC-databas. I det framtrÀdande fönstret vÀljer vi Skapa en lÀnkad tabell för att koppla till datakÀllan.

- I det nya fönstret vÀljer vi fliken MaskindatakÀlla och klickar pÄ OK. I det nya fönstret anger vi inloggningsuppgifter för anslutning till SQL-servern.

- VÀlj de tabeller som behöver kopplas. Markera Spara lösenord och klicka pÄ OK. Lösenordet ska sparas varje gÄng för alla tre tabeller.

- I indexen behöver följande vÀljas:
â TargetName för tabellen dbo_Devices;
â NodeName eller IPAddress för dbo_RegistrationData;
â NodeName eller IPAddress för dbo_StatusReport.
- Ăndra namnen pĂ„ tabellerna i MS Access, det vill sĂ€ga: ta bort prefixet dbo_ sĂ„ att DSC kan anvĂ€nda dem.

- Klart.

- Spara filen och stÀng MS Access. Kopiera nu den resulterande devices.mdb till DSC-servern (som standard i C:Program FilesWindowsPowershellDSCService) och ersÀtt den befintliga (om den finns).
Konfigurera DSC-servern för att anvÀnda SQL
- Vi ÄtervÀnder till DSC-servern. För att ansluta till SQL-servern med vÄr proxyfil, skapar vi en ny ODBC-anslutning pÄ DSC-servern. Namn, bitdjup och anslutningsinstÀllningar mÄste vara desamma som vid skapandet av MDB-filen. Det gÄr att kopiera den redan konfigurerade tomma devices.mdb hÀrifrÄn.
- För att anvĂ€nda devices.mdb mĂ„ste Ă€ndringar göras i web.config för den frĂ„gande DSC-servern (som standard â C:inetpubPSDSCPullServerweb.config):
â för Windows Server 2012
â för Windows Server 2016
Nu Àr konfigurationen av DSC-servern klar.
Kontroll av DSC-serverns funktionalitet
- Vi kontrollerar att DSC-servern Àr tillgÀnglig via webblÀsaren.

- Nu kontrollerar vi att den frÄgande DSC-servern fungerar korrekt. För detta finns ett skript pullserversetuptests.ps1 i modulen xPSDesiredStateConfiguration. Innan vi kör detta skript mÄste vi installera PowerShell-modulen som heter Pester. Vi installerar den med Install-Module -Name Pester.
- Vi öppnar C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfigurationDSCPullServerSetupPullServerDeploymentVerificationTest (i exemplet version 8.0.0.0.0).

- Vi öppnar PullServerSetupTests.ps1 och kontrollerar sökvÀgen till web.config för DSC-servern. SökvÀgen till web.config, som skriptet kommer att kontrollera, Àr markerad med rött. Om det behövs Àndrar vi den sökvÀgen.

- Vi kör pullserversetuptests.ps1
Invoke-Pester .PullServerSetupTests.ps1
Allt fungerar.
- I SQL Management Studio ser vi att de administrerade vÀrdarna skickar rapporter till DSC-rapports servern och att data kommer in i DSC:s databas pÄ SQL-servern.

Detta Àr allt. I kommande artiklar planerar jag att berÀtta hur man bygger rapporter med de erhÄllna uppgifterna och ta upp frÄgor om redundans och skalbarhet.
KĂ€lla: habr.com





































