Powershell XML添加子元素

时间:2018-06-28 10:42:18

标签: xml powershell scripting

想要在system.web元素中添加另一个子元素。 到目前为止,我已经尝试了多种方法,但是没有奏效。 我创建了此代码,但不确定是否接近。

到目前为止的代码:

#setting variables
$path = "H:\PSTesting\Logs\ExerciseXml.xml"
$xml = Get-Content $path

#Creating element
$child = $xml.CreateElement("Test")

#setting attributes
$child.SetAttribute('Testing','hey = "something"')

#adding attributes to the location
$xml.'system.web'.AppendChild($child)

#save file
$xml.Save($path)

下面是我的XML,需要更改。 当前:

<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
    -<system.web>
        <authentication mode="None"/>
        <compilation targetFramework="4.5.1" debug="false"/>
        <httpRuntime targetFramework="4.5.1"/>
    </system.web>
</configuration>

下面是运行代码的预期结果。

<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
    -<system.web>
        <authentication mode="None"/>
        <compilation targetFramework="4.5.1" debug="false"/>
        <httpRuntime targetFramework="4.5.1"/>
        <Testing Hey = 'something'>
    </system.web>
</configuration>

任何帮助将不胜感激。 预先感谢!

2 个答案:

答案 0 :(得分:2)

我不认为Robdy的答案会奏效,因为它无法解决真正的问题,即Get-Content命令将xml作为文本文件读取。因此,脚本中使用的xml属性和方法将不起作用。

但是,答案非常简单:将$xml投射到[xml]

#setting variables
$path = "H:\PSTesting\Logs\ExerciseXml.xml"
[xml]$xml = Get-Content $path                 #typecasting to xml here

#Creating element
$child = $xml.CreateElement("Test")

#setting attributes
$child.SetAttribute('Testing','hey = "something"')

#adding attributes to the location
$xml.'system.web'.AppendChild($child)

#save file
$xml.Save($path)

就像罗迪提到的那样,-具有误导性。那不是xml格式。

答案 1 :(得分:1)

您非常接近,只需进行一些更改:

#setting variables
$path = "H:\PSTesting\Logs\ExerciseXml.xml"
[xml]$xml = Get-Content $path

#Creating element
$child = $xml.CreateElement("Testing")

#setting attributes
$child.SetAttribute('hey','something')

#adding attributes to the location
$xml.configuration.'system.web'.AppendChild($child)

#save file
$xml.Save($path)

顺便说一句,您可能想从示例中删除-,因为它们具有误导性(xml实际上并不包含它们,并且只有在从IE等程序打开它时才可见)

编辑:如Rohin Sidharth所述,最好的做法是指定类型(尽管只要文件格式正确,PowerShell会自动检测到它)。 / p>

Edit2 :以澄清问题所在:

$child = $xml.CreateElement("Test")

这将在您根据所需输出创建Test时创建名为Testing的元素。

$child.SetAttribute('Testing','hey = "something"')

这将创建值为Testing的属性hey = "something"

$xml.'system.web'.AppendChild($child)

这不能正常工作,因为正确的路径是$xml.configuration.'system.web'而不是$xml.'system.web'