这是我的例子:
$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'
问题:
当我运行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
如何应用多个配置?我找不到相关文档。
答案 0 :(得分:8)
你不会在文档中找到这个,因为你(基本上)不能这样做。
我基本上说,因为从某种意义上说,你可以用DSC Partial Configurations来完成它。
这些需要不同的工作流程和不同的本地配置管理器(LCM)设置。它们无法按照您设想的方式创建多个配置,然后依次应用它们。
这是设计上的;你想要做的并不是DSC的真正含义。我们的想法是,您应该提供您正在配置的节点的(所需)状态。应用多个配置很容易导致应用相互冲突的设置。
即使有部分内容,LCM也会生成一个配置(解析你的部分内容),然后立即应用它们。
DSC对工具很轻松。关于如何最终生成配置或处理常见数据,角色等,实际上并没有什么可说的。所以你必须在大多数情况下自己动手。
应用多个单独的配置可能是您应该在自己的工作流程中处理的事情,最终导致最终编译每个节点的(单个)MOF。
我可以考虑使用Partials的两个用例。
首先(这主要是微软所考虑的角色)适用于规模较大且更加隔离的组织,其中不同的团队对其知识领域负有全部责任和所有权,并且您希望这些团队能够编写和控制自己的配置。
因此,例如,操作系统团队可能会编写各种基本操作系统配置项的配置(设置时区/ NTP,许可设置),也可能将LCM设置设置为从其余设置中提取。
DBA团队编写用于安装和配置SQL Server的配置。
安全团队编写用于设置密码策略,防火墙规则和实施等的配置。
这些团队有自己的程序,规则和自治权。他们可能有自己的拉服务器,在那里发布这些服务器。
第二个用例,通常与第一个用例相关,就是当你有多个拉服务器,或者你想组合推拉。我相信只有部分才有可能。
请注意,Windows PowerShell不太可能再次更新。 PowerShell Core(基于.Net Core并在Windows,Linux和MacOS上运行)是PowerShell开发的主要目标。
如果您正在编写大量工具和工作流程代码以支持DSC,那么请记住这一点。
答案 1 :(得分:5)
您并不总是必须使用部分配置来完成您要完成的任务。根据您使用这些配置的方式,您可以使用复合配置来实现相同的配置。以下是使用复合配置的示例的翻译。
$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'