
PowerShell Desired State Configuration (DSC) výrazně zjednodušuje nasazení a konfiguraci operačního systému, serverových rolí a aplikací, když máte stovky serverů.
Ale při použití DSC on-premises, tj. ne v MS Azure, nastává několik nuancí. Jsou obzvlášť patrné, pokud je organizace velká (od 300 pracovních stanic a serverů) a dosud neotevřela svět kontejnerů:
- Neexistují plnohodnotné zprávy o stavu systémů. Pokud se požadovaná konfigurace na některých serverech neaplikovala, bez těchto zpráv se to nedozvíme. Získat informace z vestavěného serveru zpráv je poměrně obtížné a pro velké množství hostitelů také časově náročné.
- Chybí škálovatelnost a odolnost vůči poruchám. Není možné postavit farmu dotazujících webových serverů DSC, které by měly jedinečnou odolnou databázi a společné úložiště mof-souborů konfigurací, modulů a registračních klíčů.
Dnes vám povím, jak vyřešit první problém a získat data pro sestavení zpráv. Bylo by to jednodušší, kdybychom mohli použít SQL jako databázi. MS integrovanou podporu pouze ve Windows Server 2019 nebo v buildu Windows server 1803. Získat data pomocí OleDB provider také , protože DSC-server používá pojmenovaný parametr, který není plně podporován OleDbCommand.
Našel jsem takový způsob: ti, kteří používají Windows Server 2012 a 2016, mohou použití SQL DB jako backendu pro dotazující DSC-server. K tomu vytvoříme "proxy" ve formě .mdb souboru se spojenými tabulkami, který přesměruje data obdržená ze zpráv klientů do databáze SQL serveru.
Poznámka: pro Windows Server 2016 je nutné použít , protože Microsoft.Jet.OLEDB.4.0 již není podporován.
Nebudu se podrobněji zabývat procesem nasazení dotazujícího DSC-serveru, je velmi dobře popsán . Pouze zdůrazním pár bodů. Pokud nasazujeme dotazující DSC na jednom webovém serveru se WSUS nebo Kaspersky Security Center, je nutné ve skriptu pro vytvoření konfigurace změnit následující parametry:
UseSecurityBestPractices = $falseJinak bude TLS 1.0 zakázán a nebudete se moci připojit k databázi SQL. Kaspersky Security Center také nebude fungovat (problém by měl být vyřešen v Kaspersky Security Center v11).
Enable32BitAppOnWin64 = $truePokud toto změnění nebude provedeno, nebude možné spustit AppPool serveru DSC na IIS s WSUS.
- Při instalaci serveru DSC spolu s WSUS deaktivujte statické a dynamické kešování pro web DSC.
Přejdeme k nastavení serveru DSC pro použití SQL DB.
Vytvoření SQL DB
- Vytvoříme prázdnou databázi SQL s názvem DSC.


- Vytvoříme účet pro připojení k této databázi. Předtím zkontrolujte, že na SQL serveru je povoleno ověřování účtů jak Windows, tak SQL.


- Přejdeme do sekce User Mapping. Vybereme databázi, v tomto případě – DSC. Dáme práva vlastníka databáze.

- Hotovo.

Vytvoření schémy pro databázi DSC
Schemu pro databázi DSC lze vytvořit dvěma způsoby:
- sami, pomocí skriptu v 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 - importovat data z prázdného devices.mdb v rámci PS modulu PSDesiredStateConfiguration prostřednictvím Průvodce importem dat SQL.
Devices.mdb, se kterým budeme pracovat, se nachází v C:WindowsSysWOW64WindowsPowerShellv1.0ModulesPSDesiredStateConfigurationPullServer.
- Pro import dat spustíme Průvodce importem a exportem SQL Server.

- Vybereme, odkud budeme brát data – v našem případě to je databáze Microsoft Access. Klikneme na Další.

- Vyberáme soubor, odkud importujeme schéma.

- Uvedeme, kam importovat – máme to jako SQL DB.

- Vybereme SQL server (Server Name) a databázi, do které budeme importovat data (DataBase).

- Vybereme možnost Kopírovat data z jedné nebo více tabulek nebo pohledů (kopírování dat z tabulek nebo pohledů).

- Vyberáme tabulky, ze kterých budeme importovat schéma DB.

- Zaškrtneme možnost Spustit ihned a klikneme na Dokončit.

- Hotovo.

- V důsledku toho by se v DB DSC měly objevit tabulky.

Nastavení .mdb „proxi“ souboru
Vytvoření ODBC připojení k SQL serveru. Předpokládá se, že MS Access není nainstalován na serveru s DSC, a proto je nastavení databases.mdb prováděno na mezilehlém hostiteli s nainstalovaným MS Access.
Vytvoříme systémové ODBC připojení k SQL serveru (architektura připojení by měla souhlasit s architekturou MS Access – 64 nebo 32). Můžeme to vytvořit pomocí:
— PowerShell příkazu:
Add-OdbcDsn –Name DSC –DriverName 'SQL Server' –Platform '' –DsnType System –SetPropertyValue @('Description=DSC Pull Server',"Server=",'Trusted_Connection=yes','Database=DSC') –PassThru— nebo ručně, pomocí průvodce připojením:
- Otevřeme Administrativní nástroje. Vybereme ODBC datové zdroje podle verze nainstalovaného MS Access. Přepneme na kartu System DSN a vytvoříme systémové připojení (Přidat).

- Uvedeme, že se chceme připojit k SQL serveru. Klikneme na Dokončit.

- Uvedeme název a server pro připojení. Poté bude nutné vytvořit připojení se stejnými parametry na serveru DSC.

- Uvedeme, že pro připojení k SQL serveru používáme dříve vytvořený účet se jménem DSC.

- Uvedeme databázi v nastavení připojení DSC.

- Klikneme na Dokončit.

- Před dokončením nastavení zkontrolujeme, že připojení funguje (Otestovat datový zdroj).

- Hotovo.

Vytvoření databáze devices.mdb v MS Access. Spustíme MS Access a vytvoříme prázdnou databázi s názvem devices.mdb.

- Přejdeme na kartu Vnější data, klikneme na ODBC databázi. V zobrazeném okně vybereme Vytvořit propojenou tabulku pro spojení se zdrojem dat.

- V novém okně vybereme kartu Machine Data Source a klikneme na OK. V novém okně zadáme přihlašovací údaje pro připojení k SQL serveru.

- Vybereme tabulky, které je třeba propojit. Zaškrtneme možnost Uložit heslo a klikneme na OK. Heslo je nutné uložit pokaždé pro všechny tři tabulky.

- V indexech je třeba vybrat následující:
— TargetName pro tabulku dbo_Devices;
— NodeName nebo IPAddress pro dbo_RegistrationData;
— NodeName nebo IPAddress pro dbo_StatusReport.
- Přejmenujeme tabulky v MS Access, konkrétně: odstraníme prefix dbo_, aby je DSC mohl používat.

- Hotovo.

- Uložíme soubor a zavřeme MS Access. Nyní zkopírujeme získaný devices.mdb na DSC server (podle výchozího nastavení do C:Program FilesWindowsPowershellDSCService) a nahradíme tím existující (pokud existuje).
Nastavení DSC serveru pro použití SQL
- Vracíme se k serveru DSC. Pro připojení k SQL serveru s naším proxy souborem vytvoříme nové ODBC připojení na serveru DSC. Název, architektura a nastavení připojení by měly být stejné jako při vytváření MDB souboru. Můžete zkopírovat již nastavený prázdný devices.mdb odsud.
- Pro použití devices.mdb je nutné provést změny v souboru web.config dotazujícího serveru DSC (výchozí – C:inetpubPSDSCPullServerweb.config):
— pro Windows Server 2012
— pro Windows Server 2016
Tímto je nastavení DSC serveru dokončeno.
Kontrola funkčnosti DSC serveru
- Zkontrolujeme, zda je DSC server dostupný přes webový prohlížeč.

- Nyní provedeme kontrolu, zda správně funguje dotazující server DSC. K tomu je součástí modulu xPSDesiredStateConfiguration skript pullserversetuptests.ps1. Před spuštěním tohoto skriptu je nutné nainstalovat modul PowerShell s názvem Pester. Nainstalujeme ho příkazem Install-Module -Name Pester.
- Otevíráme C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfigurationDSCPullServerSetupPullServerDeploymentVerificationTest (v příkladu verze 8.0.0.0.0).

- Otevíráme PullServerSetupTests.ps1 a kontrolujeme cestu k souboru web.config DSC serveru. Červeně jsem označil cestu k web.config, kterou skript zkontroluje. Pokud je potřeba, měníme tuto cestu.

- Spouštíme pullserversetuptests.ps1
Invoke-Pester .PullServerSetupTests.ps1
Všechno funguje.
- Ve SQL Management Studiu vidíme, že spravované hostitele zasílají zprávy na server zpráv DSC a data se dostávají do databáze DSC na SQL serveru.

Tímto je vše hotovo. V následujících článcích plánuju vyprávět, jak na získaných datech vytvořit zprávy, a dotknu se otázek o odolnosti a škálovatelnosti.
Zdroj: habr.com





































