PowerShell所需的状态配置和文件:第1部分。配置DSC Pull Server以与SQL数据库一起使用



当您有数百台服务器时,通过PowerShell期望状态配置(DSC)可以轻松部署和配置操作系统,服务器角色和应用程序。

但是当在本地使用DSC时,即 在MS Azure中没有,但是有一些细微差别。 如果组织规模较大(有300个工作站和服务器)并且尚未打开容器世界,则它们特别有形:

  • 没有关于系统状态的完整报告。 如果所需的配置没有应用到任何服务器上,那么如果没有这些报告,我们将一无所知。 从内置的报表服务器获取信息非常困难,而且对于大量主机而言,这也是很长的时间。
  • 没有可伸缩性和容错能力。 不可能构建一个轮询DSC Web服务器场,该服务器场将具有单个容错数据库以及一个公共的mof配置文件,模块和注册密钥存储库。

今天,我将告诉您如何解决第一个问题并获取报告数据。 如果SQL可以用作数据库,那么一切都会更简单。 MS 承诺仅在Windows Server 2019或Windows Server 1803构建版本中提供内置支持。由于DSC服务器使用OleDbCommand不完全支持的命名参数,因此它也将无法使用OleDB提供程序检索数据。

我发现了这种方式:对于使用Windows Server 2012和2016的用户,可以将SQL数据库配置为轮询DSC服务器的后端。 为此,请创建带有链接表的.mdb文件形式的“代理”,该代理将将从客户端报告接收的数据重定向到SQL Server数据库。

注意:对于Windows Server 2016,您必须使用AccessDatabaseEngine2016x86 ,因为不再支持Microsoft.Jet.OLEDB.4.0。

我不会详细介绍轮询DSC服务器的部署过程, 这里将对此进行详细介绍。 我只注意几点。 如果我们将轮询DSC部署在具有WSUS或Kaspersky Security Center的同一Web服务器上,那么在配置创建脚本中,必须更改以下参数:

  1. UseSecurityBestPractices     = $false 

    否则,将禁用TLS 1.0,您将无法连接到SQL数据库。 Kaspersky Security Center也不起作用(该问题应在Kaspersky Security Center v11中解决)。
  2.  Enable32BitAppOnWin64   = $true 

    如果不进行此更改,则无法使用WSUS在IIS上启动AppPool DSC服务器。
  3. 使用WSUS安装DSC服务器时,请为DSC站点禁用静态和动态缓存。

让我们继续设置DSC服务器以使用SQL数据库。

创建一个SQL数据库


  1. 创建一个名为DSC的空SQL数据库。



  2. 创建一个帐户以连接到该数据库。 预先验证是否在SQL Server上启用了Windows和SQL帐户的身份验证。



  3. 转到“用户映射”部分。 选择一个数据库,在这种情况下为DSC。 我们赋予数据库所有者的权利。

  4. 做完了


为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 
  • 通过SQL数据导入向导,从空devices.mdb导入数据作为PS模块PSDesiredStateConfiguration的一部分。

    我们将使用的Devices.mdb位于C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ Modules \ PSDesiredStateConfiguration \ PullServer。

  1. 若要导入数据,请运行SQL Server导入和导出向导。

  2. 我们选择从何处收集数据-在我们的例子中,这是一个Microsoft Access数据库。 单击下一步。

  3. 从我们导入方案的位置选择文件。

  4. 我们指出要导入的位置-我们有此SQL数据库。

  5. 我们选择SQL服务器(服务器名称)和要将数据导入其中的数据库(数据库)。

  6. 我们选择选项从一个或多个表或视图复制数据(从表或视图复制数据)。

  7. 我们选择要从中导入数据库模式的表。

  8. 选中立即运行,然后单击完成。

  9. 做完了

  10. 结果,表应该出现在DSC数据库中。


配置.mdb“代理”文件


创建与SQL Server的ODBC连接。 假定未在装有DSC的服务器上安装MS Access,因此,在安装了MS Access的中间主机上执行database.mdb配置。

让我们创建一个与SQL Server的系统ODBC连接(连接的位深度必须与MS Access的位深度匹配-64或32)。 可以使用以下方法创建它:
-Powershell cmdlet:

 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 

-或使用连接向导手动进行:

  1. 打开管理工具。 我们根据安装的MS Access版本选择ODBC数据源。 转到系统DSN选项卡并创建系统连接(添加)。

  2. 我们指示将连接到SQL Server。 单击完成。

  3. 指定名称和要连接的服务器。 然后,需要在DSC服务器上创建具有相同参数的连接。

  4. 我们指示要连接到SQL Server,我们使用先前创建的名称为DSC的登录名。

  5. 在DSC连接设置中指定数据库。

  6. 单击完成。

  7. 在完成设置之前,我们验证连接是否正常(测试数据源)。

  8. 做完了


在MS Access中创建devices.mdb数据库。 我们启动MS Access并创建一个名为devices.mdb的空数据库。



  1. 转到“外部数据”选项卡,单击“ ODBC数据库”。 在出现的窗口中,选择“创建链接表以与数据源通信”。

  2. 在新窗口中,选择“机器数据源”选项卡,然后单击“确定”。 在新窗口中,输入用于连接到SQL Server的凭据。

  3. 我们选择需要链接的表。 我们选中“保存密码”复选框,然后单击“确定”。 每次都要为所有三个表保存密码。

  4. 在索引中,您需要选择以下内容:
    -dbo_Devices表的TargetName;



    -dbo_RegistrationData的NodeName或IPAddress;



    -dbo_StatusReport的NodeName或IPAddress。

  5. 重命名MS Access中的表,即:删除dbo_前缀,以便DSC可以使用它们。

  6. 做完了

  7. 保存文件并关闭MS Access。 现在,将生成的devices.mdb复制到DSC服务器(默认情况下,在C:\ Program Files \ WindowsPowershell \ DSCService中),并将其替换为现有的(如果有)。

配置DSC服务器以使用SQL


  1. 我们返回到DSC服务器。 要使用我们的代理文件连接到SQL Server,请在DSC服务器上创建一个新的ODBC连接。 名称,位深和连接设置应与创建MDB文件时相同。 您可以从此处复制已配置的空devices.mdb。
  2. 要使用devices.mdb,您需要更改轮询DSC服务器的web.config(默认情况下,C:\ inetpub \ PSDSCPullServer \ web.config):


-适用于Windows Server 2012

 <add key="dbprovider" value="System.Data.OleDb"> <add key="dbconnectionstr" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\WindowsPowerShell\DscService\Devices.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 Files\WindowsPowerShell\DscService\Devices.mdb;"> 


这样就完成了DSC服务器的设置。

检查DSC服务器的运行状况


  1. 检查是否可以通过Web浏览器访问DSC服务器。

  2. 现在,让我们检查轮询DSC服务器是否正常工作。 为此,xPSDesiredStateConfiguration模块具有pullserversetuptests.ps1脚本。 在运行此脚本之前,必须安装名为Pester的Powershell模块。 安装它Install-Module -Name Pester。
  3. 打开C:\ Program Files \ WindowsPowerShell \ Modules \ xPSDesiredStateConfiguration \ <模块版本> \ DSCPullServerSetup \ PullServerDeploymentVerificationTest(在示例中为8.0.0.0.0版)。

  4. 打开PullServerSetupTests.ps1并检查DSC服务器的web.config的路径。 红色突出显示了web.config的路径,它将检查脚本。 如有必要,请更改此路径。

  5. 运行pullserversetuptests.ps1
    Invoke-Pester。\ PullServerSetupTests.ps1
    一切正常。

  6. 在SQL Management Studio中,我们看到托管主机将报表发送到DSC报表服务器,并且数据转到SQL Server上的DSC数据库。


仅此而已。 在以下文章中,我计划告诉您如何在接收到的数据上生成报告,并且我将涉及有关容错性和可伸缩性的问题。

Source: https://habr.com/ru/post/zh-CN452064/


All Articles