适用于:Windows PowerShell 5.0 及更高版本。
在 PowerShell 5.0 中,所需状态配置 (DSC) 允许以片段形式从多个源传递配置。 目标节点上的本地配置管理器 (LCM) 在将片段作为单个配置应用之前将它们放在一起。 此功能允许在团队或个人之间共享配置控制。 例如,如果两个或多个开发人员团队正在协作处理一项服务,他们可能都希望创建配置来管理其服务部分。 这些配置中的每一个都可以从不同的拉取服务器中提取,并且可以在不同的开发阶段添加它们。 部分配置还允许不同的个人或团队控制配置节点的不同方面,而无需协调单个配置文档的编辑。 例如,一个团队可能负责部署 VM 和作系统,而另一个团队可能在该 VM 上部署其他应用程序和服务。 使用部分配置,每个团队都可以创建自己的配置,而不会使任何一个配置变得不必要地复杂。
您可以在推送模式、拉取模式或两者的组合中使用部分配置。
推送模式下的部分配置
要在推送模式下使用部分配置,请在目标节点上配置 LCM 以接收部分配置。 必须使用 cmdlet 将 Publish-DSCConfiguration 每个部分配置推送到目标。 然后,目标节点将部分配置合并为单个配置,可以通过调用 Start-DscConfiguration cmdlet 来应用配置。
为推送模式部分配置配置 LCM
若要在推送模式下为部分配置配置 LCM,请创建一个 DSCLocalConfigurationManager 配置,每个部分配置都有一个 PartialConfiguration 块。 有关配置 LCM 的详细信息,请参阅 Windows 配置本地配置管理器。 以下示例演示了一个 LCM 配置,该配置需要两个部分配置 - 一个用于部署 OS,另一个用于部署和配置 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 所需状态配置拉取服务器)。 为此,您必须在目标节点上配置 LCM 以拉取部分配置,并在拉取服务器上正确命名和定位配置文档。
为拉取节点配置配置 LCM
若要将 LCM 配置为从拉取服务器拉取部分配置,请在 ConfigurationRepositoryWeb (对于 HTTP 拉取服务器)或 ConfigurationRepositoryShare (对于 SMB 拉取服务器)块中定义拉取服务器。 然后,使用 ConfigurationSource 属性创建引用拉取服务器的 PartialConfiguration 块。 还需要创建一个 Settings 块来指定 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'
}
}
使用 ConfigurationID 为拉取模式配置配置 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 自动化 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 中定义的配置标识。 对于我们的示例,配置文档应命名如下:
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”,但部分配置的 SharePointConfigRefreshMode 是“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