在 PowerShell 中添加 XML 个同名元素
Adding XML Elements With The Same Name In PowerShell
我有一个用于添加防火墙规则的模板,如下所示:
<?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>
我试过按照帮助here.
$newL3Rule = [System.Xml.XmlDocument](Get-Content C:\nsx-xml\new-layer3rule.xml)
$new = $newL3Rule.rule.destinations.destination.Clone()
$newL3Rule.DocumentElement.AppendChild($new)
但新目的地出现在规则下而不是目的地。有人能给我指出正确的方向吗?
你已经很接近了,你只需要使用
$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>
解释:您所做的是将 child 项添加到 XML 的顶层。如果要将 child 附加到 destinations
,则必须指定要将其添加到那里。
我有一个用于添加防火墙规则的模板,如下所示:
<?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>
我试过按照帮助here.
$newL3Rule = [System.Xml.XmlDocument](Get-Content C:\nsx-xml\new-layer3rule.xml)
$new = $newL3Rule.rule.destinations.destination.Clone()
$newL3Rule.DocumentElement.AppendChild($new)
但新目的地出现在规则下而不是目的地。有人能给我指出正确的方向吗?
你已经很接近了,你只需要使用
$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>
解释:您所做的是将 child 项添加到 XML 的顶层。如果要将 child 附加到 destinations
,则必须指定要将其添加到那里。