如果我像这样将 DSC 配置嵌套在单个文件中,它可以正常工作:
Configuration Secondary {
Param ($SomeParameter)
Environment Test {
Name = $SomeParameter
Value = "12345"
}
}
Configuration MyConfiguration {
Node localhost {
Secondary TheSecondary {
SomeParameter = "TestEnvVar"
}
}
}
MyConfiguration
Start-DscConfiguration .\MyConfiguration -Wait -Verbose
我想将我的配置拆分成两个单独的文件。一个文件将使用 dot-source 引用另一个文件以包含配置。
次要.ps1:
Configuration Secondary {
Param ($SomeParameter)
Environment Test {
Name = $SomeParameter
Value = "12345"
}
}
主.ps1:
. .\Secondary.ps1
Configuration MyConfiguration {
Node localhost {
Secondary TheSecondary {
SomeParameter = "TestEnvVar"
}
}
}
MyConfiguration
Start-DscConfiguration .\MyConfiguration -Wait -Verbose
由于某种原因,这没有获取传递给辅助配置的参数,因此导致错误:
Could not find mandatory property Name. Add this property and try again.
+ CategoryInfo : ObjectNotFound: (root/Microsoft/...gurationManager:String) [], CimException
+ FullyQualifiedErrorId : MI RESULT 6
+ PSComputerName : localhost
很奇怪,在同一个文件中可以工作,但在点源中却不行。我以为点源与在同一个文件中包含代码基本相同。我这里漏掉了什么?
答案1
如果要从未在同一个文件中定义的另一个配置中引用配置,则需要使用复合资源模式。
在模块中,您将创建一个 DscResources 文件夹。在该文件夹中,您将创建一个模块来保存复合配置。复合配置将在扩展名为 .schema.psm1 的文件中定义。该文件将需要一个模块清单,指向 schema.psm1 文件作为根模块。
有关更多详细信息和示例,请查看 PowerShell 团队博客 -http://blogs.msdn.com/b/powershell/archive/2014/02/25/reusing-existing-configuration-scripts-in-powershell-desired-state-configuration.aspx
答案2
对参数进行拆分有帮助 - 下面的修改Primary.ps1
应该有效:
. .\Secondary.ps1
Configuration MyConfiguration {
Node localhost {
$params = @{ SomeParameter = "TestEnvVar" }
Secondary TheSecondary @params
}
}
MyConfiguration
Start-DscConfiguration .\MyConfiguration -Wait -Verbose