2012-12-04 5 views
11

मान लें कि मैं Foo.ps1मैं पावरहेल स्क्रिप्ट्स में कॉन्फ़िगरेशन फ़ाइल कैसे पेश कर सकता हूं?

कहा जाता है एक PowerShell स्क्रिप्ट है

मैं एक XML विन्यास मैं कहाँ की तरह मेरे पर्यावरण सेटिंग्स कुछ निर्दिष्ट कर सकते हैं Foo.ps1.config

बुलाया फ़ाइल को पेश करना चाहते हैं:

<FunctionsDirectory> 
    $ScriptDirectory\Functions 
</FunctionsDirectory> 
<ModulesDirectory> 
    $ScriptDirectory\Modules 
</ModulesDirectory> 

और फिर मैं इस कॉन्फ़िगरेशन को Foo.ps1 की शुरुआत में लोड करना चाहता हूं ताकि मैं अपने मॉड्यूल आयात कर सकूं और कार्य निर्देशिका को नोट कर सकूं।

मैं पावरहेल में इसे कैसे प्राप्त कर सकता हूं?

+1

मैं वेब, जो मेरे लिए समझदार लग रहा है पर इस पाया:: यहाँ आउटपुट है http://www.bjd145.org/2008/01/powershell-and-xml-configuration-files.html – pencilCake

+0

या यह एक: http://rkeithhill.wordpress.com/2006/06/01/creating-and-using-a-configuration-file-for-your-powershell-scripts/ – pencilCake

+0

मैंने पहले कीथ के समाधान का उपयोग किया है , एक इलाज काम करता है। – nimizen

उत्तर

7

पर Keith's solution आधार पर ... कोड लोड करने के लिए एक्सएमएल:

$configFile = "c:\Path2Config" 
    if(Test-Path $configFile) { 
     Try { 
      #Load config appsettings 
      $global:appSettings = @{} 
      $config = [xml](get-content $configFile) 
      foreach ($addNode in $config.configuration.appsettings.add) { 
       if ($addNode.Value.Contains(‘,’)) { 
        # Array case 
        $value = $addNode.Value.Split(‘,’) 
         for ($i = 0; $i -lt $value.length; $i++) { 
          $value[$i] = $value[$i].Trim() 
         } 
       } 
       else { 
        # Scalar case 
        $value = $addNode.Value 
       } 
      $global:appSettings[$addNode.Key] = $value 
      } 
     } 
     Catch [system.exception]{ 
     } 
    } 

एक्सएमएल मूल्यों से चर भर दें:

  $variable1 = $appSettings["var1"] 
      $variable2 = $appSettings["var2"] 

और जुड़े एक्सएमएल:

<?xml version="1.0"?> 
<configuration> 
    <startup> 
    </startup> 
    <appSettings> 
<!--Vars --> 
    <add key="var1" value="variableValue1"/> 
    <add key="var2" value="variableValue2"/> 
    </appSettings> 
</configuration> 
9

शायद एक आसान समाधान .... आपकी कॉन्फ़िगरेशन फ़ाइल मानना ​​नाम है "Con अपने नए चर से बाहर

PS Testing> [xml]$configFile= get-content .\Config=.xml 
PS Testing> $configFile 
xml         configuration 
---         ------------- 
version="1.0"      configuration 

पढ़ना डेटा:: fix.xml ", इस कोशिश

PS Testing> $configFile.configuration.appsettings 
#comment        add 
--------        --- 
Vars         {add, add} 

PS Testing> $configFile.configuration.appsettings.add 
key         value 
---         ----- 
var1         variableValue1 
var2         variableValue2 

PS Testing> $configFile.configuration.appsettings.add[0].value 
variableValue2 

लंबी कहानी कम: एक्सएमएल के रूप में अपने चर कास्ट, और एक get-सामग्री है।

इस मामले में, config.xml इस तरह दिखता है:

<?xml version="1.0"?> 
<configuration> 
    <startup> 
    </startup> 
    <appSettings> 
    <!--Vars --> 
    <add key="var1" value="variableValue1"/> 
    <add key="var2" value="variableValue2"/> 
    </appSettings> 
</configuration> 
6

एक्सएमएल विन्यास के लिए एक विकल्प के लिए, यदि आप विन्यास के अन्य प्रकार का उपयोग करने लचीले होते हैं। मैं एक वैश्विक पीएस कॉन्फ़िगरेशन फ़ाइल का उपयोग करने का सुझाव देता हूं और यहां बताया गया है कि:

पावरहेल कॉन्फ़िगरेशन फ़ाइल (जैसे कॉन्फ़िगर.पीएस 1) बनाएं, फिर सभी कॉन्फ़िगरेशन को वैश्विक चर के रूप में रखें और इसे पहले चरण के रूप में डालें ताकि कॉन्फ़िगरेशन मान आपके लिए उपलब्ध हो जाएं लिपि संदर्भ।

इस दृष्टिकोण का लाभ यह है कि स्केलर चर, संग्रह और हैंश जैसी विभिन्न प्रकार की डेटा संरचना का उपयोग Config.ps1 पीएस फ़ाइल में किया जा सकता है और पीएस कोड में आसानी से संदर्भित किया जा सकता है। यहाँ सी है

enter image description here

:: \ Config \ Config.ps1 फ़ाइल:

$global:config = @{ 
    Var1 = "Value1" 

    varCollection = @{  
     item0  = "colValue0" 
     item1 = "colValue1" 
     item2 = "colValue2" 
    }  
} 

तब कार्य/कॉन्फ़िग से चर लोड

निम्नलिखित कार्रवाई में एक उदाहरण है। इस मॉड्यूल सी में PS1 फ़ाइल: \ मॉड्यूल \ PSModule.psm1, इसलिए जैसे:

$scriptFiles = Get-ChildItem "$PSScriptRoot\Config\*.ps1" -Recurse 

foreach ($script in $scriptFiles) 
{ 
    try 
    {  
     . $script.FullName 
    } 
    catch [System.Exception] 
    { 
     throw 
    } 
} 

ला stly, प्रारंभिक स्क्रिप्ट में यह एक पंक्ति नीचे है: (सी: \ Init.ps1)।

Import-Module $PSScriptRoot\Module\PSModule.psm1 -Force

Init.ps1 चलाने के बाद। वैश्विक: कॉन्फ़िगर चर आपके स्क्रिप्ट संदर्भ में उपलब्ध होगा।
enter image description here

संबंधित मुद्दे

 संबंधित मुद्दे