我正在尝试编写对.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>
答案 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,以选择要附加到的节点。