
PowerShell Desired State Configuration (DSC) значително улеснява разгръщането и конфигурирането на операционната система, сървърните роли и приложения, когато разполагате със стотици сървъри.
Но при използване на DSC on-premises, т.е. не в MS Azure, се появяват няколко нюанса. Те са особено осезаеми, когато организацията е голяма (от 300 работни станции и сървъри) и все още не е открила света на контейнерите:
- Липсват пълни отчети за състоянието на системите. Ако необходимата конфигурация не е приложена на определени сървъри, без тези отчети, ние няма да разберем. Получаването на информация от вградения отчетен сървър е доста трудно, а за голям брой хостове – и дълго.
- Липсва мащабируемост и отказоустойчивост. Невъзможно е да се изгради ферма от опрашващи уеб сървъри DSC, които да имат единна отказоустойчива база данни и общо хранилище на mof файлове с конфигурации, модули и регистрационни ключове.
Днес ще разкажа как може да се реши първият проблем и как да получите данни за изграждане на отчети. Всичко щеше да е по-просто, ако като база данни можехме да използваме SQL. MS вградена поддръжка само в 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. Нажимаем Далее.

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

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

- Выбираем SQL-сервер (Имя сервера) и базу данных, в которую будем импортировать данные (База данных).

- Выбираем опцию Копировать данные из одной или нескольких таблиц или представлений.

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

- Поставяме отметка "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
— за Windows Server 2016
С това настройката на 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





































