您如何应用多个DSC配置?

The*_*le1 6 powershell powershell-4.0 dsc powershell-5.0

这是我的例子:

$Config = @{
    AllNodes = @(
        @{ NodeName = 'localhost'; PSDscAllowPlainTextPassword = $True }
    )
}

Configuration LocalAdmin
{
    Param([String[]]$Node='localhost',[PSCredential]$Cred)

    Import-DscResource -ModuleName 'PSDscResources'
    Node $Node
    {
        User 'LocalAdmin'
        {
            Username = 'Admin'
            Description = 'DSC configuration test'
            Ensure = 'Present'
            FullName = 'Administrator Extraordinaire'
            Password = $Cred
            PasswordChangeRequired = $False
            PasswordNeverExpires = $True
        }
        Group 'AddToAdmin'
        {
            GroupName = 'Administrators'
            DependsOn = '[User]LocalAdmin'
            Ensure = 'Present'
            MembersToInclude = 'Admin'
        }
    }
}
Configuration DisableLocalAccounts
{
    Param([String[]]$Node='localhost')

    Import-DscResource -ModuleName 'PSDscResources'
    Node $Node
    {
        User 'Administrator'
        {
            Username = 'Administrator'
            Disabled = $True
        }
        User 'Guest'
        {
            Username = 'Guest'
            Disabled = $True
        }
        User 'DefaultAccount'
        {
            Username = 'DefaultAccount'
            Disabled = $True
        }
    }
}


Set-Location $env:UserProfile
LocalAdmin -Cred (Get-Credential -UserName 'Admin') -ConfigurationData $Config
DisableLocalAccounts

Start-DscConfiguration -ComputerName 'localhost' -Wait -Force -Verbose -Path '.\LocalAdmin'
Start-DscConfiguration -ComputerName 'localhost' -Wait -Force -Verbose -Path '.\DisableLocalAccounts'
Run Code Online (Sandbox Code Playgroud)

问题:
当我运行时Get-DscConfiguration,它只显示我最后运行的配置的配置.

PS C:\> Get-DscConfiguration


ConfigurationName        : DisableLocalAccounts
DependsOn                :
ModuleName               : PSDscResources
ModuleVersion            : 2.8.0.0
PsDscRunAsCredential     :
ResourceId               : [User]Administrator
SourceInfo               :
Description              : Built-in account for administering the computer/domain
Disabled                 : True
Ensure                   : Present
FullName                 :
Password                 :
PasswordChangeNotAllowed : False
PasswordChangeRequired   :
PasswordNeverExpires     : True
UserName                 : Administrator
PSComputerName           :
CimClassName             : MSFT_UserResource

ConfigurationName        : DisableLocalAccounts
DependsOn                :
ModuleName               : PSDscResources
ModuleVersion            : 2.8.0.0
PsDscRunAsCredential     :
ResourceId               : [User]Guest
SourceInfo               :
Description              : Built-in account for guest access to the computer/domain
Disabled                 : True
Ensure                   : Present
FullName                 :
Password                 :
PasswordChangeNotAllowed : True
PasswordChangeRequired   :
PasswordNeverExpires     : True
UserName                 : Guest
PSComputerName           :
CimClassName             : MSFT_UserResource

ConfigurationName        : DisableLocalAccounts
DependsOn                :
ModuleName               : PSDscResources
ModuleVersion            : 2.8.0.0
PsDscRunAsCredential     :
ResourceId               : [User]DefaultAccount
SourceInfo               :
Description              : A user account managed by the system.
Disabled                 : True
Ensure                   : Present
FullName                 :
Password                 :
PasswordChangeNotAllowed : False
PasswordChangeRequired   :
PasswordNeverExpires     : True
UserName                 : DefaultAccount
PSComputerName           :
CimClassName             : MSFT_UserResource
Run Code Online (Sandbox Code Playgroud)

如何应用多个配置?我找不到关于此的文档.

bri*_*ist 8

你不会在文档中找到这个,因为你(基本上)不能这样做.

我基本上说,因为从某种意义上说,你可以用DSC部分配置来做到这一点.

这些需要不同的工作流程和不同的本地配置管理器(LCM)设置.它们无法按照您设想的方式创建多个配置,然后依次应用它们.

这是设计的; 你想要做的并不是DSC的真正含义.我们的想法是,您应该提供正在配置的节点的(所需)状态.应用多个配置很容易导致应用冲突的设置.

即使有部分,LCM也会生成一个配置(解析你的部分),然后立即应用所有部分.


该怎么做:

DSC对工具很轻松.关于如何最终生成配置或处理常见数据,角色等,并没有多少说法.所以你必须在大多数情况下自己动手.

应用多个单独的配置可能是您应该在自己的工作流程中处理的事情,最终导致最终编译每个节点的(单个)MOF.

什么是Partials?

我可以想到两个用例,它们适合使用Partials.

首先(这主要是微软所考虑的角色)适用于规模较大且更加隔离的组织,不同的团队对其知识领域负有全部责任和所有权,并且您希望这些团队能够自己编写和控制配置.

因此,例如,操作系统团队可能会编写各种基本操作系统配置项的配置(设置时区/ NTP,许可设置),也可能将LCM设置设置为从其余设置中提取.

DBA团队编写用于安装和配置SQL Server的配置.

安全团队编写用于设置密码策略,防火墙规则和实施等的配置.

这些团队有自己的程序,规则和自治权.他们可能有自己的拉服务器,他们发布这些服务器.

第二个用例通常与第一个用例相关,就是当你有多个pull服务器,或者你想要组合推送和拉取时.我相信只有部分才有可能.


未来

请注意,Windows PowerShell不太可能再次更新.PowerShell Core(基于.Net Core并在Windows,Linux和MacOS上运行)是PowerShell开发的主要目标.

有了这个,DSC也将发生变化,并获得一个全新的版本,可以更好地跨平台工作.

如果您正在编写大量工具和工作流代码以支持DSC,那么请记住这一点.


N.G*_*pta 6

您不必总是为要完成的工作使用部分配置。您可以使用复合配置来实现相同的目标,具体取决于您如何使用这些配置。这是使用复合配置的示例翻译。

    $Config = @{
    AllNodes = @(
        @{ NodeName = 'localhost'; PSDscAllowPlainTextPassword = $True }
    )
}
Configuration LocalAdmin
{
    Param([String[]]$Node='localhost',[PSCredential]$Cred)

    Import-DscResource -ModuleName 'PSDscResources'
    Node $Node
    {
        User 'LocalAdmin'
        {
            Username = 'Admin'
            Description = 'DSC configuration test'
            Ensure = 'Present'
            FullName = 'Administrator Extraordinaire'
            Password = $Cred
            PasswordChangeRequired = $False
            PasswordNeverExpires = $True
        }
        Group 'AddToAdmin'
        {
            GroupName = 'Administrators'
            DependsOn = '[User]LocalAdmin'
            Ensure = 'Present'
            MembersToInclude = 'Admin'
        }
    }
}
Configuration DisableLocalAccounts
{
    Param([String[]]$Node='localhost')

    Import-DscResource -ModuleName 'PSDscResources'
    Node $Node
    {
        User 'Administrator'
        {
            Username = 'Administrator'
            Disabled = $True
        }
        User 'Guest'
        {
            Username = 'Guest'
            Disabled = $True
        }
        User 'DefaultAccount'
        {
            Username = 'DefaultAccount'
            Disabled = $True
        }
    }
}
Configuration AllAccounts
{
    Param([String[]]$Node='localhost',[PSCredential]$Cred)
    DisableLocalAccounts localAccount
    {
       Node = $Node
    }
    LocalAdmin localAdmin
    {
        Node = $Node
        Cred = $Cred
    }
}
Set-Location $env:UserProfile
AllAccounts -Cred (Get-Credential -UserName 'Admin') -ConfigurationData $Config
Start-DscConfiguration -ComputerName 'localhost' -Wait -Force -Verbose -Path '.\AllAccounts'
Run Code Online (Sandbox Code Playgroud)

  • 我不知道你可以这样称呼他们。整洁的! (2认同)
  • 这也是一个很好的选择。这些通常被称为 Composite _Resources_。请记住,这也是在设计时完成的;编译过程将所有这些解析为一个 MOF。此外,如果您使用 `Invoke-DscResource` 或任何依赖于该 cmdlet 来合并 DSC 资源的配置管理系统,复合资源将不起作用(因为底层 DSC 引擎没有复合的概念)。 (2认同)
  • 这不是复合资源,但编译时构造和 cmdlet 始终处理单个资源。复合资源是另一种方法,但会带来资源部署的麻烦。 (2认同)