- PVSM.RU - https://www.pvsm.ru -

PowerShell Desired State Configuration (DSC) сильно упрощает работу по развертыванию и конфигурированию операционной системы, ролей сервера и приложений, когда у вас сотни серверов.
Но при использовании DSC on-premises, т.е. не в MS Azure, возникает пара нюансов. Они особенно ощутимы, если организация большая (от 300 рабочих станций и серверов) и в ней еще не открыли мир контейнеров:
Сегодня я расскажу, как можно решить первую проблему и получить данные для построения отчетности. Все было бы проще, если в качестве базы данных можно было бы использовать SQL. MS обещает [1]встроенную поддержку только в Windows Server 2019 или в build Windows server 1803. Забирать данные с использованием OleDB provider тоже не получится [2], так как DSC-сервер использует именованный параметр, который не полностью поддерживается OleDbCommand.
Нашел вот такой способ: тем, кто использует Windows Server 2012 и 2016, можно настроить [3] использование БД SQL в качестве backend’a для опрашивающего DSC-сервера. Для этого создадим «прокси» в виде .mdb файла со связанными таблицами, который будет перенаправлять данные, полученные от отчетов клиентов, в БД SQL-сервера.
Примечание: для Windows Server 2016 необходимо использовать AccessDatabaseEngine2016x86 [4], так как Microsoft.Jet.OLEDB.4.0 больше не поддерживается.
Я не буду подробно останавливаться на процессе развертывания опрашивающего DSC-сервера, он очень хорошо описан тут [5]. Отмечу только пару моментов. Если мы разворачиваем опрашивающий 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 для использования БД SQL.






Создать схему для базы данных DSC можно двумя способами:
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, с которым мы будем работать, находится в C:WindowsSysWOW64WindowsPowerShellv1.0ModulesPSDesiredStateConfigurationPullServer.










Создание ODBC-подключения к SQL-серверу. Предполагается, что MS Access не установлен на сервере с DSC, поэтому настройка databases.mdb выполняется на промежуточном хосте с установленным MS Access.
Создадим системное ODBC-подключение к SQL-серверу (разрядность подключения должна совпадать с разрядностью MS Access – 64 или 32). Его можно создать с помощью:
— командлета Powershell:
Add-OdbcDsn –Name DSC –DriverName 'SQL Server' –Platform '<64-bit or 32-bit>' –DsnType System –SetPropertyValue @('Description=DSC Pull Server',"Server=<Name of your SQL Server>",'Trusted_Connection=yes','Database=DSC') –PassThru
— или вручную, с помощью мастера подключений:








Создание базы данных devices.mdb в MS Access. Запускаем MS Access и создаем пустую базу данных под названием devices.mdb.





— NodeName или IPAddress для dbo_RegistrationData;

— NodeName или IPAddress для dbo_StatusReport.



— для Windows Server 2012
<add key="dbprovider" value="System.Data.OleDb">
<add key="dbconnectionstr" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:Program FilesWindowsPowerShellDscServiceDevices.mdb;">
— для Windows Server 2016
<add key="dbprovider" value="System.Data.OleDb">
<add key="dbconnectionstr" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:Program FilesWindowsPowerShellDscServiceDevices.mdb;">
На этом настройка DSC-сервера закончена.





На этом все. В следующих статьях планирую рассказать, как на полученных данных построить отчеты, и коснусь вопросов про отказоустойчивость и масштабируемость.
Автор: dm_dsc
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/powershell/317821
Ссылки в тексте:
[1] обещает : https://techsnips.io/snips/how-to-configure-a-dsc-pull-server-to-use-a-sql-database-backend-in-windows-server-2019/
[2] не получится: https://blogs.msdn.microsoft.com/wushuai/2016/11/27/try-to-use-sql-server-as-dsc-pull-server-backend/
[3] настроить: https://blogs.technet.microsoft.com/fieldcoding/2017/05/11/using-sql-server-2016-for-a-dsc-pull-server/
[4] AccessDatabaseEngine2016x86: https://download.microsoft.com/download/3/5/C/35C84C36-661A-44E6-9324-8786B8DBE231/AccessDatabaseEngine.exe
[5] тут: https://docs.microsoft.com/ru-ru/powershell/dsc/pull-server/pullserver
[6] Источник: https://habr.com/ru/post/452064/?utm_source=habrahabr&utm_medium=rss&utm_campaign=452064
Нажмите здесь для печати.