来自不同文件的嵌套 PowerShell DSC 配置

来自不同文件的嵌套 PowerShell DSC 配置

如果我像这样将 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

答案3

根据这个答案,它接受以下格式的参数:

Node localhost {
    Secondary TheSecondary -SomeParameter "TestEnvVar"
}

仅供参考。

相关内容