2016-07-20 7 views
0

Ich versuche, App-Einstellungen in web.config Powershell Nachaktualisieren App-Einstellungen in web.config mit Hilfe von Powershell-Wörterbuch

mit zu ändern, ist web.config-Datei;

<configuration> 
    <connectionStrings> 
     <add name="TestDBEntities" connectionString="metadata=res://*/TestProject.csdl|res://*/TestProject.ssdl|res://*/TestProject.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SQL01;initial catalog=TestDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <appSettings> 
     <add key="ActivePeriod" value="false" /> 
     <add key="Environment" value="UAT" /> 
     <add key="authmode" value="4" /> 
     <add key="IsEncryptedConfig" value="true" /> 
     <add key="LogErrorsToText" value="true" /> 
    </appSettings> 
</configuration> 

Ich möchte die Werte der App-Einstellungen ändern. Dafür habe ich alle entsprechenden Werte im PowerShell-Wörterbuch gespeichert. Hier sieht mein Wörterbuch aus;

Key      Value 
-----     ----- 
ActivePeriod   true 
Environment    prod 
LogErrorsToText   false 

Jetzt möchte ich jeden der Dictionary-Schlüssel mit den Appsetting-Schlüssel übereinstimmen. Wenn einer der Wörterbuchschlüssel mit dem Appsetting-Schlüssel übereinstimmt, sollte er die entsprechenden Werte ersetzen. In meinem Fall erwarte ich folgende Ausgabe;

<configuration> 
    <connectionStrings> 
     <add name="TestDBEntities" connectionString="metadata=res://*/TestProject.csdl|res://*/TestProject.ssdl|res://*/TestProject.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SQL01;initial catalog=TestDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <appSettings> 
     <add key="ActivePeriod" value="true" /> 
     <add key="Environment" value="prod" /> 
     <add key="authmode" value="4" /> 
     <add key="IsEncryptedConfig" value="true" /> 
     <add key="LogErrorsToText" value="false" /> 
    </appSettings> 
</configuration> 

Kann mir bitte jemand mögliche Lösungen vorschlagen. Danke im Voraus.

Antwort

2

Iterate über die Keys im Wörterbuch, und finden Sie die entsprechenden <add /> Knoten im XML-Dokument, stellen Sie dann das Attribut, wenn gefunden:

$xml = [xml](Get-Content .\app.config) 

$Dictionary = @{ 
    ActivePeriod = 'true' 
    Environment  = 'prod' 
    LogErrorsToText = 'false' 
} 

foreach($key in $Dictionary.Keys) 
{ 
    Write-Host "Locating key: '$key' in XML" 
    # Use XPath to find the appropriate node 
    if(($addKey = $xml.SelectSingleNode("//appSettings/add[@key = '$key']"))) 
    { 
     Write-Host "Found key: '$key' in XML, updating value to $($Dictionary[$key])" 
     $addKey.SetAttribute('value',$Dictionary[$key]) 
    } 
} 
+0

Vielen Dank für die schnelle Antwort. Kannst du mir bitte auch sagen, wie ich die Datei nach dem Ändern der Werte speichern soll. – mahesh

+1

'$ xml.Save (". \ App.config ")' –

+0

Ich bekomme keine Fehler, aber es ist nicht in der Lage, die Werte zu ersetzen. Müssen wir diesen Befehl ändern? '$ addKey.SetAttribute ('Wert', $ Dictionary [$ Schlüssel])' – mahesh

Verwandte Themen