
PowerShell Desired State Configuration (DSC) значително улеснява разгръщането и конфигурирането на операционната система, ролите на сървъра и приложенията, когато имате стотици сървъри.
Но при използването на DSC on-premises, т.е. не в MS Azure, възникват няколко нюанса. Те са особено забележими, ако организацията е голяма (от 300 работни станции и сървъри) и в нея още не са открили света на контейнерите:
- Липсват пълноценни отчети за състоянието на системите. Ако необходимата конфигурация не е приложена на някои сървъри, без тези отчети няма да разберем за това. Информацията от вградения отчетен сървър е доста трудна за получаване, а за голям брой хостове – още по-бавна.
- Липсва мащабируемост и отказоустойчивост. Невъзможно е да се изгради ферма от опрашващи уеб-сървъри на DSC, които да имат единна отказоустойчива база данни и общо хранилище на mof файлове за конфигурации, модули и регистрационни ключове.
Днес ще разкажа как може да се реши първият проблем и да се получат данни за изграждане на отчетност. Всичко би било по-просто, ако можехме да използваме SQL като база данни. вградената поддръжка само в Windows Server 2019 или в build Windows server 1803. Чрез OleDB provider също , тъй като DSC-сървърът използва именуван параметър, който не се поддържа напълно от OleDbCommand.
Намерих такъв начин: за тези, които използват Windows Server 2012 и 2016, може да се използва SQL база данни като backend за опрашващия DSC-сървър. За целта ще създадем "прокси" под формата на .mdb файл със свързани таблици, който ще пренасочва данни, получени от клиентските отчети, в база данни SQL-сървър.
Забележка: за Windows Server 2016 е необходимо да се използва , тъй като Microsoft.Jet.OLEDB.4.0 вече не се поддържа.
Няма да се спирам подробно на процеса на разгръщане на опрашващия DSC-сървър, той е много добре описан . Ще отбележа само няколко момента. Ако разгръщаме опрашващия DSC на един уеб сървър с WSUS или Kaspersky Security Center, то в скрипта за създаване на конфигурацията е необходимо да променим следните параметри:
UseSecurityBestPractices = $falseВ противном случае TLS 1.0 будет отключен, и вы не сможете подключиться к SQL БД. Kaspersky Security Center также будет неработоспособен (задача должна быть решена в Kaspersky Security Center v11).
Enable32BitAppOnWin64 = $trueЕсли не внести это изменение, не удастся запустить AppPool DSC-сервера на IIS с WSUS.
- При установке DSC-сервера вместе с WSUS отключите статическое и динамическое кэширование для сайта DSC.
Перейдем к настройке DSC-сервера для работы с SQL БД.
Создание SQL БД
- Создадим пустую SQL базу данных с именем DSC.


- Создадим учетную запись для доступа к этой базе данных. Предварительно убедитесь, что на SQL-сервере разрешена аутентификация как для Windows, так и для SQL.


- Переходим в раздел User Mapping. Выбираем базу данных, в данном случае – DSC. Предоставляем права владельца базы данных.

- Готово.

Создание схемы для базы данных DSC
Создать схему для базы данных DSC можно двумя способами:
- самостоятельно, через 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 - импортировать данные из пустого devices.mdb в рамках PS-модуля PSDesiredStateConfiguration через Мастера импорта данных SQL.
Devices.mdb, с которым мы будем работать, находится в C:WindowsSysWOW64WindowsPowerShellv1.0ModulesPSDesiredStateConfigurationPullServer.
- Для импорта данных запустите SQL Server Import and Export Wizard.

- Выбираем источник данных – в нашем случае это база данных Microsoft Access. Нажимаем Next.

- Выбираем файл, откуда будет импортирована схема.

- Указываем, куда импортировать – это наша SQL БД.

- Выбираем SQL-сервер (Server Name) и базу данных, куда будем импортировать данные (DataBase).

- Выбираем опцию Copy data from one or more tables or views (копирование данных из одной или нескольких таблиц или представлений).

- Избираме таблиците, от които ще импортираме схемата на базата данни.

- Поставяме отметка Run Immediately и щракваме Finish.

- Готово.

- В резултат на това в базата данни DSC трябва да се появят таблиците.

Конфигуриране на .mdb файл "прокси"
Създаване на ODBC връзка към SQL сървъра. Предполага се, че MS Access не е инсталиран на сървъра с DSC, така че конфигурацията на databases.mdb се извършва на междинен хост с инсталиран MS Access.
Ще създадем системна ODBC връзка към SQL сървъра (разрядността на връзката трябва да съвпада с разрядността на MS Access – 64 или 32). Може да се създаде с помощта на:
— PowerShell командлет:
Add-OdbcDsn –Name DSC –DriverName 'SQL Server' –Platform '' –DsnType System –SetPropertyValue @('Description=DSC Pull Server',"Server=''",'Trusted_Connection=yes','Database=DSC') –PassThru— или ръчно, с помощта на мастера за връзки:
- Отваряме Administrative tools. Избираме източниците на данни ODBC в зависимост от версията на инсталирания MS Access. Преминаваме в таба System DSN и създаваме системна връзка (Add).

- Уточняваме, че ще се свържем към SQL сървъра. Щракваме Finish.

- Уточняваме името и сървъра за връзка. След това подобна връзка трябва да се създаде и на сървера DSC.

- Уточняваме, че за свързване към SQL сървъра се използва предварително създаден от нас логин с име DSC.

- Уточняваме базата данни в настройките на връзката DSC.

- Щракваме Finish.

- Преди да завършим конфигурацията, проверяваме дали връзката работи (Test Data Source).

- Готово.

Създаване на базата данни devices.mdb в MS Access. Стартираме MS Access и създаваме празна база данни с име devices.mdb.

- Преминаваме в таба Външни данни, щракайки на База данни ODBC. В появилото се прозорче избираме Създаване на свързана таблица за свързване с източника на данни.

- В новото прозорче избираме таба Machine Data Source и щракваме ОК. В новото прозорче въвеждаме данните за вход за свързване към SQL сървъра.

- Избираме таблиците, които трябва да се свържат. Поставяме отметка Съхрани паролата и щракваме ОК. Паролата трябва да се запазва всеки път за всички три таблици.

- В индексите трябва да изберем следните:
— TargetName за таблицата dbo_Devices;
— NodeName или IPAddress за dbo_RegistrationData;
— NodeName или IPAddress за dbo_StatusReport.
- Преименуваме таблиците в MS Access, а именно: премахваме префикса dbo_, за да може DSC да ги използва.

- Готово.

- Запазваме файла и закриваме MS Access. Сега копираме получения devices.mdb на сървера DSC (по подразбиране в C:Program FilesWindowsPowershellDSCService) и го заместваме с съществуващия (ако такъв съществува).
Настройка на DSC-сървър за използване на SQL
- Връщаме се към DSC сървъра. За да се свържем с SQL сървъра чрез нашия proxy файл, ще създадем ново ODBC свързване на DSC сървъра. Името, разрядността и настройките на свързването трябва да бъдат същите като при създаването на MDB файл. Може да копирате вече настроеното празно devices.mdb оттук.
- За да използвате devices.mdb, трябва да внесете промени в web.config на опрашващия сървър DSC (по подразбиране – C:inetpubPSDSCPullServerweb.config):
— за Windows Server 2012
\n— за Windows Server 2016
\nНа това настройката на DSC сървъра е приключена.
Проверка на работоспособността на DSC сървъра
- Нека проверим дали DSC сървърът е достъпен през уеб браузър.

- Сега ще проверим дали опрашващият сървър DSC функционира правилно. За целта, в модула xPSDesiredStateConfiguration има скрипт pullserversetuptests.ps1. Преди да стартирате този скрипт, е необходимо да инсталирате модула PowerShell с име Pester. Инсталирайте го с командата Install-Module -Name Pester.
- Отворете C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfigurationDSCPullServerSetupPullServerDeploymentVerificationTest (в примера версията е 8.0.0.0.0).

- Отворете PullServerSetupTests.ps1 и проверете пътя към web.config на DSC сървъра. Пътят към web.config, който скриптът ще провери, е изписан с червено. При необходимост променете този път.

- Стартирайте pullserversetuptests.ps1
Invoke-Pester .PullServerSetupTests.ps1
Всичко работи.
- В SQL Management Studio виждаме, че администрираните хостове изпращат отчети на сървъра за отчети DSC и данните постъпват в базата данни DSC на SQL сървъра.

На това всичко приключва. В следващите статии планирам да разкажа как на получените данни да изградим отчети и ще засегна въпросите за отказоустойчивост и масштабируемост.
Източник: habr.com





































