web-dev-qa-db-ja.com

異なるファイルからのPowerShell DSC構成のネスト

このようにDSC構成を1つのファイルにネストすると、正常に機能します。

Configuration Secondary {
    Param ($SomeParameter)

    Environment Test {
        Name = $SomeParameter
        Value = "12345"
    }
}

Configuration MyConfiguration {
    Node localhost {
        Secondary TheSecondary {
            SomeParameter = "TestEnvVar"
        }
    }
}

MyConfiguration

Start-DscConfiguration .\MyConfiguration -Wait -Verbose

構成を2つの別々のファイルに分割したい。一方が他方をドットソース化して構成を含めます。

Secondary.ps1:

Configuration Secondary {
    Param ($SomeParameter)

    Environment Test {
        Name = $SomeParameter
        Value = "12345"
    }
}

Primary.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

同じファイル内では機能するが、ドットソーシングでは機能しないことは非常に奇妙に思われます。ドットソーシングは基本的に同じファイルにコードを含めることと同じだと思いました。ここで何が欠けていますか?

6
Richard

同じファイルで定義されていない別の構成から構成を参照する場合は、複合リソースパターンを使用する必要があります。

モジュールでは、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

5
Steven Murawski

パラメータのスプラッティングが役立ちます-修正後のPrimary.ps1は動作するはずです:

. .\Secondary.ps1

Configuration MyConfiguration {
    Node localhost {
        $params = @{ SomeParameter = "TestEnvVar" }
        Secondary TheSecondary @params
    }
}

MyConfiguration

Start-DscConfiguration .\MyConfiguration -Wait -Verbose
3
mgr32

この回答ごとに 、次の形式のパラメーターを除く:

Node localhost {
    Secondary TheSecondary -SomeParameter "TestEnvVar"
}

情報提供のみ。

0
Der_Meister