Назад | Перейти на главную страницу

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

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

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

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

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