首页 > 解决方案 > 通过 PowerShell 删除 XML 中的子项?

问题描述

我已经搜索了所有地方以找到此问题的答案,但我似乎找不到适合我的答案,是的,我知道这已经被问了很多,但没有一个工作。

这是我的代码:

$Request = Invoke-RestMethod ($BaseURL + $StatPage) -WebSession  $Session -Method Post -Body $StatBody
$Request = $Request | Where-Object {$_.'mac' -ne "00:00:00:00:00:00"}

我什至尝试过,而不是删除它只是打印出来的节点:

foreach($Node in $Request.'ajax-response'.response.'acl-list'.acl.deny)
{
     if($Node.'mac' -eq "00:00:00:00:00:00")
     {
         $Node.ParentNode.RemoveNode($Node)
     }
}

这产生了很好的旧错误:Collection was of a fixed size..

我尝试了其他一些但不再有代码,MAC 有效并且在列表中,并通过保存和检查验证了这一点。

这是一些示例XML

我需要使用 XML,因为 API 只支持它,我真的碰壁了,需要一些帮助:)

标签: .netxmlpowershell

解决方案


出现错误Collection was of a fixed size.表明您可能正在使用集合\数组而不是 XML 元素。

您可以将Invoke-RestMethod输出显式转换为 XmlDocument:

[xml] $Request = Invoke-RestMethod ($BaseURL + $StatPage) -WebSession  $Session -Method Post -Body $StatBody

RemoveChild()并在要删除的节点上调用该方法:

foreach($Node in $Request.'ajax-response'.response.'acl-list'.acl.deny)
{
     if($Node.'mac' -eq "00:00:00:00:00:00")
     {
         $Node.ParentNode.RemoveChild($Node)
     }
}

如果您对给出的输出不感兴趣RemoveChild(),可以将其通过管道传递给 null:

$Node.ParentNode.RemoveChild($Node) | Out-Null

推荐阅读