PowerShell Desired State Configuration 部分配置

适用于:Windows PowerShell 5.0 及更高版本。

在 PowerShell 5.0 中,Desired State Configuration (DSC) 允许从多个源中以片段形式提交配置。 目标节点上的本地配置管理器 (LCM) 将碎片整理到一起,然后将其作为单个配置进行应用。 此功能允许在团队或个人之间共享配置控制权。 例如,如果两个或更多开发人员团队协作提供一项服务,那么每个团队都可以创建配置来管理该服务中由其负责的部分。 可以从不同请求服务器请求其中每个配置,并可以在各个开发阶段加入这些配置。 部分配置还允许不同的个人或团队控制配置节点的不同方面,而无需协调单个配置文档的编辑。 例如,可能由一个团队负责部署 VM 和操作系统,而由另一个团队负责在该 VM 上部署其它应用程序和服务。 使用部分配置,每个团队都可以创建自己的配置,避免任何不必要的复杂配置。

可以在推送模式、请求模式或两种模式的组合下使用部分配置。

推送模式下的部分配置

若要在推送模式下使用部分配置,你需要在目标节点上配置 LCM 以接收部分配置。 必须使用 Publish-DSCConfiguration cmdlet 将每个部分配置推送到目标。 然后,目标节点将部分配置组合成为单个配置。你可以通过调用 Start-DscConfiguration cmdlet 来应用配置。

针对推送模式部分配置来配置 LCM

若要针对推送模式下的部分配置来配置 LCM,你可以为每个部分配置创建带有一个 PartialConfiguration 块的 DSCLocalConfigurationManager 配置。 有关配置 LCM 的详细信息,请参阅 Windows 配置本地配置管理器。 下面的示例显示了需要两个部分配置的 LCM 配置:一个用于部署操作系统,另一个用于部署和配置 SharePoint。

[DSCLocalConfigurationManager()]
configuration PartialConfigDemo
{
    Node localhost
    {

        PartialConfiguration ServiceAccountConfig
        {
            Description = 'Configuration to add the SharePoint service account to the Administrators group.'
            RefreshMode = 'Push'
        }
           PartialConfiguration SharePointConfig
        {
            Description = 'Configuration for the SharePoint server'
            RefreshMode = 'Push'
        }
    }
}

PartialConfigDemo

每个部分配置的 RefreshMode 都设置为“Push”。 PartialConfiguration 块的名称(在本例中即“ServiceAccountConfig”和“SharePointConfig”)必须与推送到目标节点的配置名称完全匹配。

注意

每个 PartialConfiguration 块的名称都必须与配置脚本中指定的配置实际名称匹配,而不是与 MOF 文件的名称(这应是目标节点的名称或 localhost)匹配。

发布和启动推送模式部分配置

然后,可以对每个配置调用 Publish-DSCConfiguration,将包含配置文档的文件夹作为 Path 参数进行传递。 Publish-DSCConfiguration将配置 MOF 文件放置到目标节点。 发布两个配置后,即可在目标节点上调用 Start-DSCConfiguration –UseExisting

例如,如果你在创作节点上编译了以下配置 MOF 文档:

Get-ChildItem -Recurse
    Directory: C:\PartialConfigTest

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        8/11/2016   1:55 PM                ServiceAccountConfig
d-----       11/17/2016   4:14 PM                SharePointConfig

    Directory: C:\PartialConfigTest\ServiceAccountConfig

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/11/2016   2:02 PM           2034 TestVM.mof

    Directory: C:\PartialConfigTest\SharePointConfig

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       11/17/2016   4:14 PM           1930 TestVM.mof

你会发布和运行如下所示的配置:

Publish-DscConfiguration .\ServiceAccountConfig -ComputerName 'TestVM'
Publish-DscConfiguration .\SharePointConfig -ComputerName 'TestVM'
Start-DscConfiguration -UseExisting -ComputerName 'TestVM'
Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
17     Job17           Configuratio... Running       True            TestVM            Start-DscConfiguration...

注意

运行 Publish-DSCConfiguration cmdlet 的用户必须在目标节点上拥有管理员权限。

请求模式下的部分配置

可以从一个或多个请求服务器请求部分配置(有关请求服务器的详细信息,请参阅 Windows PowerShell Desired State Configuration 请求服务器)。 若要执行此操作,必须在要请求部分配置的目标节点上配置 LCM,并在请求服务器上正确命名和定位配置文档。

针对请求节点配置来配置 LCM

若要配置 LCM 以从请求服务器请求部分配置,你需要在 ConfigurationRepositoryWeb(适用于 HTTP 请求服务器)或者 ConfigurationRepositoryShare(适用于 SMB 请求服务器)块上定义请求服务器。 然后创建 PartialConfiguration 块,这些块通过使用 ConfigurationSource 属性引用请求服务器。 你还需创建设置块来指定 LCM 使用请求模式,并指定请求服务器和目标节点用于识别配置的 ConfigurationNames 或者 ConfigurationID。 下面的元配置定义了名为 CONTOSO-PullSrv 的 HTTP 请求服务器,以及使用该请求服务器的两个部分配置。

有关使用 ConfigurationNames 配置 LCM 的详细信息,请参阅使用配置名称设置请求客户端。 有关使用 ConfigurationID 配置 LCM 的详细信息,请参阅使用配置 ID 设置请求客户端

使用配置名称针对配置模式配置来配置 LCM

[DscLocalConfigurationManager()]
Configuration PartialConfigDemoConfigNames
{
        Settings
        {
            RefreshFrequencyMins            = 30;
            RefreshMode                     = "PULL";
            ConfigurationMode               ="ApplyAndAutocorrect";
            AllowModuleOverwrite            = $true;
            RebootNodeIfNeeded              = $true;
            ConfigurationModeFrequencyMins  = 60;
        }
        ConfigurationRepositoryWeb CONTOSO-PullSrv
        {
            ServerURL                       = 'https://CONTOSO-PullSrv:8080/PSDSCPullServer.svc'
            RegistrationKey                 = 5b41f4e6-5e6d-45f5-8102-f2227468ef38
            ConfigurationNames              = @("ServiceAccountConfig", "SharePointConfig")
        }

        PartialConfiguration ServiceAccountConfig
        {
            Description                     = "ServiceAccountConfig"
            ConfigurationSource             = @("[ConfigurationRepositoryWeb]CONTOSO-PullSrv")
        }

        PartialConfiguration SharePointConfig
        {
            Description                     = "SharePointConfig"
            ConfigurationSource             = @("[ConfigurationRepositoryWeb]CONTOSO-PullSrv")
            DependsOn                       = '[PartialConfiguration]ServiceAccountConfig'
        }
}

使用配置 ID 针对配置模式配置来配置 LCM

[DSCLocalConfigurationManager()]
configuration PartialConfigDemoConfigID
{
    Node localhost
    {
        Settings
        {
            RefreshMode                     = 'Pull'
            ConfigurationID                 = '1d545e3b-60c3-47a0-bf65-5afc05182fd0'
            RefreshFrequencyMins            = 30
            RebootNodeIfNeeded              = $true
        }
        ConfigurationRepositoryWeb CONTOSO-PullSrv
        {
            ServerURL                       = 'https://CONTOSO-PullSrv:8080/PSDSCPullServer.svc'

        }

           PartialConfiguration ServiceAccountConfig
        {
            Description                     = 'Configuration for the Base OS'
            ConfigurationSource             = '[ConfigurationRepositoryWeb]CONTOSO-PullSrv'
            RefreshMode                     = 'Pull'
        }
           PartialConfiguration SharePointConfig
        {
            Description                     = 'Configuration for the Sharepoint Server'
            ConfigurationSource             = '[ConfigurationRepositoryWeb]CONTOSO-PullSrv'
            DependsOn                       = '[PartialConfiguration]ServiceAccountConfig'
            RefreshMode                     = 'Pull'
        }
    }
}
PartialConfigDemo

你可以从多个请求服务器请求部分配置:定义每个请求服务器,然后在每个 PartialConfiguration 块中引用相应请求服务器即可。

创建元配置后,必须运行该元配置以创建配置文档(MOF 文件),然后调用 Set-DscLocalConfigurationManager 以配置 LCM。

在请求服务器 (ConfigurationNames) 上命名和放置配置文档

必须将部分配置文档置于请求服务器的 web.config 文件中指定为 ConfigurationPath 的文件夹中(通常为 C:\Program Files\WindowsPowerShell\DscService\Configuration)。

在 PowerShell 5.1 中的拉取服务器上命名配置文档

如果只要从单个拉取服务器中拉取一个部分配置,可以对配置文档进行任意命名。 如果要从拉取服务器中拉取多个部分配置,可以将配置文档命名为 <ConfigurationName>.mof(其中 ConfigurationName 是部分配置的名称)或 <ConfigurationName>.<NodeName>.mof(其中 ConfigurationName 是部分配置的名称,NodeName 是目标节点的名称)。 这样一来,便可以从 Azure Automation DSC 拉取服务器中拉取配置。

在 PowerShell 5.0 中的拉取服务器上命名配置文档

配置文档必须按如下所示命名:ConfigurationName.mof,其中 ConfigurationName 是部分配置的名称。 在本例中,配置文档应按如下所示命名:

ServiceAccountConfig.mof
ServiceAccountConfig.mof.checksum
SharePointConfig.mof
SharePointConfig.mof.checksum

在请求服务器 (ConfigurationID) 上命名和放置配置文档

必须将部分配置文档置于请求服务器的 web.config 文件中指定为 ConfigurationPath 的文件夹中(通常为 C:\Program Files\WindowsPowerShell\DscService\Configuration)。 配置文档必须按如下所示命名:<ConfigurationName>.<ConfigurationID>.mof,其中 ConfigurationName 是部分配置的名称,ConfigurationID 是目标节点上 LCM 中定义的配置 ID。 在本例中,配置文档应按如下所示命名:

ServiceAccountConfig.1d545e3b-60c3-47a0-bf65-5afc05182fd0.mof
ServiceAccountConfig.1d545e3b-60c3-47a0-bf65-5afc05182fd0.mof.checksum
SharePointConfig.1d545e3b-60c3-47a0-bf65-5afc05182fd0.mof
SharePointConfig.1d545e3b-60c3-47a0-bf65-5afc05182fd0.mof.checksum

从请求服务器上运行部分配置

在目标节点上配置 LCM,并在请求服务器上正确创建和命名配置文档后,目标节点将请求并合并部分配置,然后按照由 LCM 的 RefreshFrequencyMins 属性指定的固定时间间隔应用生成的配置。 如果要强制刷新,可以调用 Update-DscConfiguration cmdlet 来拉取并应用配置。

推送与请求混合模式下的部分配置

你还可以混用推送和请求模式以进行部分配置。 也就是说,你可以同时拥有一个从请求服务器请求的部分配置和另一个推送的部分配置。 根据上文各部分所述,指定每个部分配置的刷新模式。 例如,还是以下面的元配置为例,其中 ServiceAccountConfig 部分配置处于拉取模式,SharePointConfig 部分配置处于推送模式。

使用 ConfigurationNames 的推送与请求混合模式

[DscLocalConfigurationManager()]
Configuration PartialConfigDemoConfigNames
{
        Settings
        {
            RefreshFrequencyMins            = 30;
            RefreshMode                     = "PULL";
            ConfigurationMode               = "ApplyAndAutocorrect";
            AllowModuleOverwrite            = $true;
            RebootNodeIfNeeded              = $true;
            ConfigurationModeFrequencyMins  = 60;
        }
        ConfigurationRepositoryWeb CONTOSO-PullSrv
        {
            ServerURL                       = 'https://CONTOSO-PullSrv:8080/PSDSCPullServer.svc'
            RegistrationKey                 = 5b41f4e6-5e6d-45f5-8102-f2227468ef38
            ConfigurationNames              = @("ServiceAccountConfig", "SharePointConfig")
        }

        PartialConfiguration ServiceAccountConfig
        {
            Description                     = "ServiceAccountConfig"
            ConfigurationSource             = @("[ConfigurationRepositoryWeb]CONTOSO-PullSrv")
            RefreshMode                     = 'Pull'
        }

        PartialConfiguration SharePointConfig
        {
            Description                     = "SharePointConfig"
            DependsOn                       = '[PartialConfiguration]ServiceAccountConfig'
            RefreshMode                     = 'Push'
        }

}

使用 ConfigurationID 的推送与请求混合模式

[DSCLocalConfigurationManager()]
configuration PartialConfigDemo
{
    Node localhost
    {
        Settings
        {
            RefreshMode             = 'Pull'
            ConfigurationID         = '1d545e3b-60c3-47a0-bf65-5afc05182fd0'
            RefreshFrequencyMins    = 30
            RebootNodeIfNeeded      = $true
        }
        ConfigurationRepositoryWeb CONTOSO-PullSrv
        {
            ServerURL               = 'https://CONTOSO-PullSrv:8080/PSDSCPullServer.svc'

        }

           PartialConfiguration ServiceAccountConfig
        {
            Description             = 'Configuration for the Base OS'
            ConfigurationSource     = '[ConfigurationRepositoryWeb]CONTOSO-PullSrv'
            RefreshMode             = 'Pull'
        }
           PartialConfiguration SharePointConfig
        {
            Description             = 'Configuration for the Sharepoint Server'
            DependsOn               = '[PartialConfiguration]ServiceAccountConfig'
            RefreshMode             = 'Push'
        }
    }
}
PartialConfigDemo

请注意,Settings 块中指定的 RefreshMode 为“Pull”,而 SharePointConfig 部分配置的 RefreshMode 为“Push”。

可按照上文所述的相应刷新模式命名和放置配置 MOF 文件。 可调用 Publish-DSCConfiguration 来发布 SharePointConfig 部分配置,并等待从请求服务器请求 ServiceAccountConfig 配置或通过调用 Update-DscConfiguration 强制进行刷新。

ServiceAccountConfig 部分配置示例

Configuration ServiceAccountConfig
{
    Param (
        [Parameter(Mandatory,
                   HelpMessage="Domain credentials required to add domain\sharepoint_svc to the local Administrators group.")]
        [ValidateNotNullOrEmpty()]
        [pscredential]$Credential
    )

    Import-DscResource -ModuleName PSDesiredStateConfiguration

    Node localhost
    {
        Group LocalAdmins
        {
            GroupName           = 'Administrators'
            MembersToInclude    = 'domain\sharepoint_svc',
                                  'admins@example.domain'
            Ensure              = 'Present'
            Credential          = $Credential
        }

        WindowsFeature Telnet
        {
            Name                = 'Telnet-Server'
            Ensure              = 'Absent'
        }
    }
}
ServiceAccountConfig

SharePointConfig 部分配置示例

Configuration SharePointConfig
{
    Param (
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [pscredential]$ProductKey
    )

    Import-DscResource -ModuleName xSharePoint

    Node localhost
    {
        xSPInstall SharePointDefault
        {
            Ensure      = 'Present'
            BinaryDir   = '\\FileServer\Installers\Sharepoint\'
            ProductKey  = $ProductKey
        }
    }
}
SharePointConfig

另请参阅

Windows PowerShell Desired State Configuration 请求服务器

Windows 配置本地配置管理器