Обновите configSource элемента XML в web.config с помощью Powershell, передав Параметры - PullRequest
2 голосов
/ 25 августа 2009

Я пытаюсь найти способ обновить мой web.config для разных сред, обновив configSource для элемента appSettings в web.config.

Вот способ, которым я знаю, как это сделать.

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

Проблема в том, что мне нужен один базовый сценарий, в котором я могу передать в разные узлы сценарий, который я хочу изменить и обновить, но я не уверен, как это сделать.

Например, я хочу иметь возможность вызывать скрипт powershell, подобный этому

changeWebConfig.ps1 nodeToChange newValueofNode

Надеюсь, это было достаточно ясно.

Это код, который у меня сейчас есть.

$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)

У меня была проблема с узлом конфигурации

Мне пришлось изменить его с

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

это до

<configuration>

Я еще не уверен, как найти узел с узлом конфигурации в его первоначальном состоянии, но я все ближе.

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

Ответы [ 2 ]

3 голосов
/ 25 августа 2009

Наконец-то разобрался.

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

конечно, я заменю "// client [@configSource]" на переменную, чтобы я мог передавать в разные узлы в качестве параметров для создания моего базового скрипта.

2 голосов
/ 21 апреля 2010

Я тоже ищу способ изменить код.

Вот способ просмотра узла:

$path = 'c:\site\web.config'
$PublishState = (Select-Xml -Path $path -XPath "configuration/appSettings/add[@key='PublishState']/@value").Node.'#text'
$PublishState
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...