首页 > 解决方案 > 在 PowerShell 中添加同名的 XML 元素

问题描述

我有一个用于添加防火墙规则的模板,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<rule disabled="false" logged="false">
    <name></name>
    <action>allow</action>
    <notes></notes>
    <appliedToList>
        <appliedTo>
            <value></value>
        </appliedTo>
    </appliedToList>
    <sectionId></sectionId>
    <sources excluded="true">
        <source>
            <value></value>
        </source>
    </sources>
    <destinations excluded="false">
        <destination>
            <value></value>
        </destination>
    </destinations>
    <services>
        <service>
            <value></value>
        </service>
    </services>
</rule>

只要我们只需要一种服务、来源或目的地,它就可以正常工作。例如,如果有多个目的地,我希望能够在 PowerShell 中创建新的子节点。

<?xml version="1.0" encoding="UTF-8"?>
<rule disabled="false" logged="false">
    <destinations excluded="false">
        <destination>
            <value></value>
        </destination>
        <destination>
            <value></value>
        </destination>
    </destinations>
</rule>

我试着按照这里的帮助。

$newL3Rule = [System.Xml.XmlDocument](Get-Content C:\nsx-xml\new-layer3rule.xml)
$new = $newL3Rule.rule.destinations.destination.Clone()
$newL3Rule.DocumentElement.AppendChild($new)

但是新目的地出现在规则而不是目的地之下。有人可以指出我正确的方向吗?

标签: xmlpowershellvmware

解决方案


你非常接近,你只需要使用

$newL3Rule.DocumentElement.destinations.AppendChild($new)

结果:

<?xml version="1.0" encoding="UTF-8"?>
<rule disabled="false" logged="false">
    <name></name>
    <action>allow</action>
    <notes></notes>
    <appliedToList>
        <appliedTo>
            <value></value>
        </appliedTo>
    </appliedToList>
    <sectionId></sectionId>
    <sources excluded="true">
        <source>
            <value></value>
        </source>
    </sources>
    <destinations excluded="false">
        <destination>
            <value></value>
        </destination>
        <destination>
            <value></value>
        </destination>
    </destinations>
    <services>
        <service>
            <value></value>
        </service>
    </services>
</rule>

解释:您所做的是将子项添加到 XML 的顶层。如果你想将 child 附加到destinations你必须指定你想在那里添加它。


推荐阅读