Вложение конфигураций 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

Я хочу разделить мою конфигурацию на два отдельных файла. Один будет точечно-источник другого, чтобы включить конфигурацию.

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

Кажется очень странным, что это работает, когда в том же файле, но не при точечной выборке. Я думал, что точечный источник в основном такой же, как и включение кода в тот же файл. Что мне здесь не хватает?

3 ответа

Решение

Если вы хотите сослаться на конфигурацию из другой конфигурации, которая не определена в том же файле, вам нужно использовать составной шаблон ресурса.

В модуле вы создадите папку 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

Сплатинг параметров помогает - следуя исправленным Primary.ps1 должно сработать:

. .\Secondary.ps1

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

MyConfiguration

Start-DscConfiguration .\MyConfiguration -Wait -Verbose

Согласно этому ответу, он исключает параметры в следующем формате:

Node localhost {
    Secondary TheSecondary -SomeParameter "TestEnvVar"
}

Просто для информации.

Другие вопросы по тегам