Powershell - XML在现有部分中插入新行

时间:2017-11-28 08:51:41

标签: xml powershell

我有一个XML文件的解压缩默认安装,预先填充了XML设置,就像这样......

<system.web>
  <compilation targetFramework="4.6.1" debug="false" />
  <httpRuntime targetFramework="4.6.1" requestPathInvalidCharacters=""/>
</system.web>

我在每个版本上都要进行一系列环境更改,因此它会在system.web部分添加一行...

<system.web>
  <compilation targetFramework="4.6.1" debug="false" />
  <httpRuntime targetFramework="4.6.1" requestPathInvalidCharacters=""/>
  <customErrors mode="Off" />
</system.web>

这将用于八达通部署,我相信使用Powershell 2.0作为其基础。

在Powershell脚本中,我该如何添加...    customErrors mode =&#34; Off&#34; / ...声明到该XML文件的现有system.web部分?

提前致谢 (先前链接的重复问题不是一个简明的答案 - 谢谢)

1 个答案:

答案 0 :(得分:1)

经过大量的反复试验,找到了......

我之前的XML ......

<?xml version="1.0"?>
<configuration>
  <anothernode>
     <notalot target="1" debug="dish" />
  </anothernode>
  <system.web>
     <compilation targetFramework="4.6.1" debug="false" />
     <httpRuntime targetFramework="4.6.1" requestPathInvalidCharacters="" />
  </system.web>
</configuration>

Powershell代码,我选择使用$ var值,但没有什么可以阻止你在代码中加入硬编码的东西,记住&#39;&#39;&#39;尽管如此引用它们!

# This will add <customErrors mode="Off" /> to the system.web section
$filename = "C:\Users\user\Desktop\Neil\newxmlsettings.xml"
$var1 = 'customErrors'
$var2 = 'mode'
$var3 = 'Off'
#
[xml]$xml = Get-Content $filename
$body = [xml]$xml
$newnode = $body.CreateElement($var1)
$newnode.SetAttribute($var2,$var3)
$body.SelectSingleNode("//system.web").AppendChild($newnode)
$xml.Save($filename)

&#34; system.web&#34;只需要在AppendChild语句的引号中,因为它有一个。在其中,对于单个元素名称,您可以省略它周围的双引号。

最终XML ......

<?xml version="1.0"?>
<configuration>
  <anothernode>
     <notalot target="1" debug="dish" />
  </anothernode>
  <system.web>
     <compilation targetFramework="4.6.1" debug="false" />
     <httpRuntime targetFramework="4.6.1" requestPathInvalidCharacters="" />
     <customErrors mode="Off" />
  </system.web>
</configuration>