2013-07-27 5 views
6

का उपयोग कर वेब कॉन्फ़िगरेशन फ़ाइल संपादित करना मैं पावरहेल का उपयोग करके अपनी वेब कॉन्फ़िगरेशन फ़ाइल को संशोधित करना चाहता हूं। मैं कहीं कहीं अटक गया। मैं ऐपसेटिंग और कनेक्शनस्ट्रिंग जानकारी को उसी समय अपडेट करना चाहता हूं जब मैं उन्हें पावरहेलमाइक्रोसॉफ्ट पावरशेल

में यह कोड प्राप्त करता हूं लेकिन यह केवल ऐपसेटेटिंग मान बदलता है जब मैं इसे यहां बदलता हूं और इसे चलाता हूं लेकिन मैं यहां कनेक्शनस्ट्रिंग भी शामिल करना चाहता हूं। मैं इसे कैसे प्राप्त कर सकता हूं?

$webConfig = "C:\Inetpub\Wwwroot\application\web.config" 
$doc = new-object System.Xml.XmlDocument 
$doc.Load($webConfig) 
$doc.get_DocumentElement()."appsetting".add[0].value = "true" 
$doc.Save($webConfig) 

यहाँ मेरी वेब कॉन्फ़िग फ़ाइल

<appSettings> 
    <add key="mykey1" value="false"/> 
    <add key="mykey2" value="true"/> 
    <add key="mykey3" value="false"/> 
</appSettings> 

    <connectionstrings> 

    <add name="myname1" connectinstring="Data Source=ABDULLAH-PC\SQLEXPRESS;Initial Catalog=UserDataBase; 
    Integrated Security=True" providerName="System.Data.SqlClient" /> 
    <add name="myname2" connectinstring="myconnectionstring2" /> 
    <add name="myname3" connectinstring="myconnectionstring3" /> 
</connectionStrings> 

यहाँ मैं appSettings upadate करना चाहते है - (कुंजी और मान) और भी ConnectionStrings (नाम और initialcatalog) एक ही समय में

जब मैंने आपके कोड की कोशिश की है यह मुझे यह त्रुटि देता है

Property '#text' cannot be found on this object; make sure it exists and is settable. 
At line:3 char:66 
+ $doc.SelectSingleNode('//appSettings/add[@key="mykey1"]/@value'). <<<< '#text' = 'false' 
+ CategoryInfo   : InvalidOperation: (#text:String) [], RuntimeException 
+ FullyQualifiedErrorId : PropertyNotFound 

Property '#text' cannot be found on this object; make sure it exists and is settable. 
At line:4 char:85 
+ $doc.SelectSingleNode('//connectionStrings/add[@name="myname1"]/@connectionstring'). <<<< '#text'='my_string'  
    + CategoryInfo   : InvalidOperation: (#text:String) [], RuntimeException 
    + FullyQualifiedErrorId : PropertyNotFound 

उत्तर

18
$webConfig = "C:\Inetpub\Wwwroot\application\web.config" 
$doc = (gc $webConfig) -as [xml] 
$doc.SelectSingleNode('//appSettings/add[@key="mykey1"]/@value').'#text' = 'true' 
$doc.SelectSingleNode('//connectionStrings/add[@name="myname1"]/@connectionstring').'#text' = 'my_string' 
$doc.Save($webConfig) 

आप अपने नोड्स का चयन करने के लिए XPath का उपयोग कर सकते हैं और #text संपत्ति PowerShell के माध्यम से अपना मान सेट कर सकते हैं।

नोट - आपके उदाहरण xml में आवरण और कुछ टाइपो के साथ समस्याएं हैं। यहां मैंने परीक्षण किया है:

<root> 
    <appSettings> 
     <add key="mykey1" value="false"/> 
    </appSettings> 
    <connectionStrings> 
     <add name="myname1" connectionstring="Data Source=ABDULLAH-PC\SQLEXPRESS;Initial Catalog=UserDataBase; Integrated Security=True" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
</root> 
+0

हाय, मुझे #text क्षेत्र में क्या लिखना चाहिए? – user2375896

+1

@ user2375896 जो वास्तव में '# text' होना चाहिए। PowerShell उस संपत्ति में XML नोड का मान रखता है। इसके अलावा मैं आपके एक्सएमएल लेआउट पर अनुमान लगा रहा हूं। यदि आप अपने पास एक्सएमएल पोस्ट करते हैं और जो आप जोड़ना चाहते हैं और जहां मैं आपके लिए उदाहरण बेहतर कर सकता हूं। –

+0

मैं पावरहेल संस्करण 4 का उपयोग कर रहा हूं और '# text''' मेरे लिए काम नहीं करता है। '.value' के साथ' # text'' को प्रतिस्थापित करना चाल चल रहा है। – Darrel