2009-08-25 3 views
2

Ich versuche eine Möglichkeit zu finden, meine web.config für verschiedene Umgebungen zu aktualisieren, indem ich die configSource für das appSettings-Element in der web.config aktualisiere.Update configSource des XML-Elements in web.config mit Powershell durch Übergabe von Parametern

Hier sind die Art, wie ich es weiß.

$xml.get_DocumentElement().appSettings.configSource = $replaced_test 

Das Problem ist, dass ich eine Basis Skript will, wo ich in verschiedenen Knoten an das Skript übergeben kann, die ich ändern und aktualisieren will, aber ich bin nicht sicher, wie es zu tun.

Zum Beispiel möchte ich in der Lage sein, einen Powershell-Skript zu nennen wie diese

changeWebConfig.ps1 nodeToChange newValueofNode 

Ich hoffe, das klar genug war.

Dies ist der Code, den ich jetzt habe.

$webConfigPath = "C:\web.config" 

# Get the content of the config file and cast it to XML 
$xml = [xml](get-content $webConfigPath) 

#this was the trick I had been looking for 
$root = $xml.get_DocumentElement()."system.serviceModel".client.configSource = $replace 

# Save it 
$xml.Save($webConfigPath) 

Das Problem Ich wurde

ich es die Knoten Konfiguration war von

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 

dieser zu

<configuration> 

Ich bin nicht sicher ändern musste, wie um den Knoten mit der Konfiguration zu finden Der Ionenknoten ist noch in seinem ursprünglichen Zustand, aber ich komme näher.

function Set-ConfigAppSetting 
([string]$PathToConfig=$(throw 'Configuration file is required'), 
     [string]$Key = $(throw 'No Key Specified'), 
     [string]$Value = $(throw 'No Value Specified')) 
{ 
    if (Test-Path $PathToConfig) 
    { 
     $x = [xml] (type $PathToConfig) 
     $node = $x.SelectSingleNode("//client[@configSource]") 
     $node.configSource = $Value 
     $x.Save($PathToConfig) 
    } 
} 

set-configappsetting "c:\web.config" CurrentTaxYear ".\private$\dinnernoworders" -confirm 

Antwort

3

Endlich herausgefunden.

$root = $xml.get_DocumentElement().SelectSingleNode("//client[@configSource]").configSource = "test" 

natürlich werde ich ersetzen „// Client [@configSource]“ mit einer Variablen, so kann ich in verschiedenen Knoten als Parameter übergeben, um meine Basis-Skript zu erstellen.

+0

FYI Sie get_DocumentElement nicht verwenden müssen(). $ xml.SelectSingleNode ("...") funktioniert, da SelectSingleNode auch auf einem XmlDocument verfügbar ist, was in diesem Fall $ xml ist. –

2

Ich bin auf der Suche nach einer Möglichkeit, den Code zu ändern.

Hier ist eine Art und Weise Sie sehen können, was ist der Knoten:

$path = 'c:\site\web.config' 
$PublishState = (Select-Xml -Path $path -XPath "configuration/appSettings/add[@key='PublishState']/@value").Node.'#text' 
$PublishState 
Verwandte Themen