Sto avendo un sacco di problemi nel cercare di ottenere uno script di configurazione di stato desiderato PowerShell che funzioni per configurare un'applicazione interna. La radice del problema è che non riesco a passare i miei dati di configurazione in una ScriptResource (almeno non nel modo in cui sto provando a farlo).DSC PowerShell - come passare i parametri di configurazione a ScriptResources?
mio script dovrebbe creare una cartella di configurazione per la nostra applicazione in-house, e quindi scrivere alcune impostazioni in un file:
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"
}
}
}
Per riferimento, il mio dati di configurazione si presenta così:
$config = @{
AllNodes = @(
@{
NodeName = "*"
ConfigFolder = "C:\myapp\config"
ConfigFile = "C:\myapp\config\config.txt"
}
@{
NodeName = "ServerA"
Enabled = "true"
}
@{
NodeName = "ServerB"
Enabled = "false"
}
)
}
E sto applicando DSC con il seguente:
$mof = MyApp -ConfigurationData $config;
Start-DscConfiguration MyApp –Wait –Verbose;
Quando applico questa configurazione crea felicemente la cartella, ma non riesce a fare nulla con il file di configurazione. Osservando l'output di seguito, è ovvio che è perché la variabile $ Node è nullo nell'ambito di ConfigurationFile/TestScript, ma non ho idea di come fare riferimento da quel blocco.
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.
ho bruciato un intero giorno alla ricerca online per questo specifico problema, ma tutti gli esempi di variabili, parametri e dati di configurazione tutto l'uso di file e risorse del Registro di sistema o altre risorse non di script, che ho già funzionante nel blocco "ConfigurationFolder" nel mio script. La cosa su cui sono bloccato è come fare riferimento ai dati di configurazione all'interno di una risorsa Script come il mio "ConfigurationFile".
Ho disegnato uno spazio vuoto in modo tale che qualsiasi aiuto sarebbe molto apprezzato. Se tutto il resto fallisce, potrei dover creare uno script di "configurazione" separato per server e codificare i valori, cosa che in realtà non voglio fare se possibile.
Cheers,
Mike
In realtà, è possibile utilizzare le parentesi graffe, hai solo bisogno di raddoppiare loro (in modo '{' diventa '{{' e '}' diventa '}}'). – BartekB