Вложение конфигураций 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"
}
Просто для информации.