मुझे एक इन-हाउस एप्लिकेशन को कॉन्फ़िगर करने के लिए काम कर रहे पावरशेल वांछित राज्य कॉन्फ़िगरेशन स्क्रिप्ट प्राप्त करने का प्रयास करने में बहुत परेशानी हो रही है। समस्या की जड़ यह है कि मैं अपने कॉन्फ़िगरेशन डेटा को स्क्रिप्ट संसाधन में पास नहीं कर सकता (कम से कम जिस तरह से मैं इसे करने की कोशिश कर रहा हूं)।पावरशेल डीएससी - स्क्रिप्ट संसाधनों में कॉन्फ़िगरेशन पैरामीटर कैसे पास करें?
मेरे स्क्रिप्ट एक फ़ाइल में हमारे घर में आवेदन के लिए एक config फ़ोल्डर कुछ सेटिंग्स बनाते हैं और फिर लिखने के लिए माना जाता है:
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"
}
)
}
और मैं साथ डीएससी को लागू करने कर रहा हूँ निम्नलिखित:
$mof = MyApp -ConfigurationData $config;
Start-DscConfiguration MyApp –Wait –Verbose;
जब मैं लागू यह कॉन्फ़िगरेशन यह खुशी से फ़ोल्डर बनाता है, लेकिन कॉन्फ़िगरेशन फ़ाइल के साथ कुछ भी करने में विफल रहता है। नीचे दिए गए आउटपुट को देखते हुए, यह स्पष्ट है कि ऐसा इसलिए है क्योंकि $ Node चर कॉन्फ़िगरेशनफ़ाइल/टेस्टस्क्रिप्ट के दायरे में शून्य है, लेकिन मुझे नहीं पता कि उस ब्लॉक के भीतर से इसका संदर्भ कैसे दिया जाए।
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.
मैं इस विशिष्ट समस्या के लिए ऑनलाइन खोज एक पूरे दिन बंद जला दिया गया है, लेकिन सभी चर, मापदंडों और विन्यास डेटा सभी उपयोग फ़ाइल और रजिस्ट्री संसाधन या अन्य गैर-स्क्रिप्ट संसाधनों का उदाहरण है, जो मैंने पहले से ही मेरी स्क्रिप्ट में "कॉन्फ़िगरेशनफोल्डर" ब्लॉक में काम कर रहा है। जिस चीज़ पर मैं फंस गया हूं वह है कि मेरे "कॉन्फ़िगरेशनफ़ाइल" जैसे स्क्रिप्ट संसाधन के भीतर कॉन्फ़िगरेशन डेटा का संदर्भ कैसे लें।
मैंने एक पूर्ण खाली खींचा है ताकि किसी भी मदद की सराहना की जा सके। यदि सब कुछ विफल हो जाता है तो मुझे प्रति सर्वर एक अलग "कॉन्फ़िगरेशन" स्क्रिप्ट बनाना और मूल्यों को हार्ड-कोड बनाना पड़ सकता है, जिसे मैं वास्तव में नहीं करना चाहता हूं।
चीयर्स,
माइक
वास्तव में उपयोग करते हैं, आप घुंघराले ब्रेसिज़ उपयोग कर सकते हैं, तो आप सिर्फ उन्हें दोगुना करने के लिए (ताकि '{' हो जाता है की जरूरत है '{{' और '}' '}}}')। – BartekB