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