Mam problem z uzyskaniem skryptu konfiguracji stanu pożądanego programu PowerShell do skonfigurowania aplikacji wewnętrznej. Przyczyną problemu jest to, że nie mogę przekazać danych konfiguracyjnych do źródła ScriptResource (przynajmniej nie tak, jak próbuję to zrobić).PowerShell DSC - jak przekazać parametry konfiguracyjne do ScriptResources?
Mój skrypt powinien utworzyć folder config dla naszej aplikacji w-domu, a następnie napisać kilka ustawień do pliku:
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"
}
}
}
Dla porównania, moje dane konfiguracja wygląda następująco:
$config = @{
AllNodes = @(
@{
NodeName = "*"
ConfigFolder = "C:\myapp\config"
ConfigFile = "C:\myapp\config\config.txt"
}
@{
NodeName = "ServerA"
Enabled = "true"
}
@{
NodeName = "ServerB"
Enabled = "false"
}
)
}
A ja stosowania DSC z następujących czynności:
$mof = MyApp -ConfigurationData $config;
Start-DscConfiguration MyApp –Wait –Verbose;
Kiedy stosuje się ta konfiguracja szczęśliwie tworzy folder, ale nie robi nic z plikiem konfiguracyjnym. Patrząc na wynik poniżej, jest oczywiste, że dzieje się tak dlatego, że zmienna $ Node ma wartość null w zakresie pliku ConfigurationFile/TestScript, ale nie mam pojęcia, jak ją powiązać z poziomu tego bloku.
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.
Mam wypalane cały dzień szukają w internecie dla tego konkretnego problemu, ale wszystkie przykłady zmiennych, parametrów i danych konfiguracyjnych cały plik i wykorzystanie zasobów rejestru lub innych zasobów niż scenariusz, który ja już działa w bloku "ConfigurationFolder" w moim skrypcie. Problemem, na którym utknąłem, jest odwoływanie się do danych konfiguracyjnych z zasobu skryptu, takiego jak mój "plik konfiguracyjny".
Narysowałem kompletną pustkę, więc każda pomoc będzie bardzo ceniona. Jeśli wszystko inne zawiedzie, będę musiał utworzyć osobny skrypt "konfiguracyjny" na serwer i zakodować wartości, których naprawdę nie chcę robić, jeśli to w ogóle możliwe.
Cheers,
Mike
Faktycznie, można użyć nawiasów klamrowych, po prostu trzeba je dwukrotnie (tak '{' staje '{{' i '}' staje się '}}'). – BartekB