PowerShell更改.Net配置文件

时间:2017-09-06 15:36:07

标签: .net xml powershell scripting

我正在尝试编写对.NET machine.config文件的一些更改,并且我一直在遇到问题。我已经使用了网络上的所有示例,无论我使用哪些示例,我都会遇到不同的错误。以下片段是我最接近的片段。但是,而不是在" Path"中添加配置文件。它只是创建一个包含所有代码的新文档?

$path = "c:\Temp\Machine.config"
[xml]$machineConfig = Get-Content $path

$Channelsxml = $machineConfig.CreateElement("Channels")
$Channelsxml.SetAttribute ref= "http server" port="443"
$node.AppendChild($Channelsxml) | Out-Null

$machineConfig.Save("c:\Temp\Machine.config")

它在mydocuments中创建一个文档,其中包含所有代码,而不是更改位于给定路径中的配置文件。我也得到以下错误:

+ $Channelsxml.setAttribute ref= "http server" port="443"
+                           ~~~~
Unexpected token 'ref=' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

我需要做的是添加以下内容:

<channels> 
<channel ref="http server" port="443"/> 
</channels> 

1 个答案:

答案 0 :(得分:0)

您对SetAttribute()方法的使用是错误的。您希望将属性添加到您创建的节点的子节点中(因此您还需要创建该子节点),并且需要向该子节点添加2个单独的属性。

# create node <channel ref="http server" port="443"/>
$n1 = $machineConfig.CreateElement('channel')
$n1.SetAttribute('ref', 'http server')
$n1.SetAttribute('port', '443')

# create node <channels> and append node <channel .../>
$n2 = $machineConfig.CreateElement("channels")
$n2.AppendChild($n1) | Out-Null

然后,您需要将$n2附加到$machineConfig中的节点:

$parent = $machineConfig.SelectSingleNode('...')
$parent.AppendChild($n2)

...替换为适当的XPath expression,以选择要附加到的节点。