更新XML元素的configSource在使用PowerShell的web.config通过传递参数

2019-07-03 15:43发布

我试图找出一个办法,通过更新configSource在web.config中的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

Answer 1:

终于找到它了。

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

当然,我将取代“//客户端[@configSource]”具有可变,所以我可以在不同的节点作为参数传递给创建我基脚本。



Answer 2:

林寻找一种方式来修改代码。

这里是你可以查看最新的节点的方式:

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


文章来源: Update configSource of XML element in web.config using Powershell by passing in Parameters