У меня много проблем с попыткой получить конфигурацию желаемого состояния PowerShell script, работающую над настройкой собственного приложения. Корень проблемы заключается в том, что я не могу передать свои данные конфигурации в ScriptResource (по крайней мере, не так, как я пытаюсь это сделать).
My script должен создать конфигурационную папку для нашего внутреннего приложения, а затем записать некоторые настройки в файл:
configuration MyApp {
param (
[string[]] $ComputerName = $env:ComputerName
)
node $ComputerName {
File ConfigurationFolder {
Type = "Directory"
DestinationPath = $Node.ConfigFolder
Ensure = "Present"
}
Script ConfigurationFile {
SetScript = {
write-verbose "running ConfigurationFile.SetScript";
write-verbose "folder = $($Node.ConfigFolder)";
write-verbose "filename = $($Node.ConfigFile)";
[System.IO.File]::WriteAllText($Node.ConfigFile, "enabled=" + $Node.Enabled);
}
TestScript = {
write-verbose "running ConfigurationFile.TestScript";
write-verbose "folder = $($Node.ConfigFolder)";
write-verbose "filename = $($Node.ConfigFile)";
return (Test-Path $Node.ConfigFile);
}
GetScript = { @{Configured = (Test-Path $Node.ConfigFile)} }
DependsOn = "[File]ConfigurationFolder"
}
}
}
Для справки мои данные конфигурации выглядят следующим образом:
$config = @{
AllNodes = @(
@{
NodeName = "*"
ConfigFolder = "C:\myapp\config"
ConfigFile = "C:\myapp\config\config.txt"
}
@{
NodeName = "ServerA"
Enabled = "true"
}
@{
NodeName = "ServerB"
Enabled = "false"
}
)
}
И я применяю DSC со следующим:
$mof = MyApp -ConfigurationData $config;
Start-DscConfiguration MyApp –Wait –Verbose;
Когда я применяю эту конфигурацию, он с радостью создает папку, но ничего не может сделать с конфигурационным файлом. Рассматривая вывод ниже, очевидно, что это потому, что переменная $ Node имеет значение null внутри области ConfigurationFile/TestScript, но я понятия не имею, как ссылаться на нее из этого блока.
LCM: [ Start Resource ] [[Script]ConfigurationFile]
LCM: [ Start Test ] [[Script]ConfigurationFile]
[[Script]ConfigurationFile] running ConfigurationFile.TestScript
[[Script]ConfigurationFile] node is null = True
[[Script]ConfigurationFile] folder =
[[Script]ConfigurationFile] filename =
LCM: [ End Test ] [[Script]ConfigurationFile] in 0.4850 seconds.
Я сжег целый день в Интернете, чтобы узнать об этой конкретной проблеме, но все примеры переменных, параметров и данных конфигурации используют ресурсы File и Registry или другие ресурсы без script, которые у меня уже есть работая в блоке "ConfigurationFolder" в моем script. Я застрял в том, как ссылаться на данные конфигурации из ресурса script, например, на мой "ConfigurationFile".
Я нарисовал полный пробел, поэтому любая помощь была бы весьма признательна. Если все остальное не удастся, мне может потребоваться создать отдельную "конфигурацию" script на сервер и скорректировать значения, которые я действительно не хочу делать, если это вообще возможно.
Приветствия,
Mike