You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

根据节点值获取XML节点名称,分类Enable/Disable节点

解决方法

首先,你需要同时获取XML节点的名称和值,而不是只提取文本。下面是完整的PowerShell实现步骤:

1. 正确读取XML并获取节点信息

替换你原来的代码,改用[xml]类型直接加载XML文件,这样能更方便地访问节点属性:

# 定义XML文件路径
$xmlPath = "C:\Users\Lenovo\Desktop\shellscripts\xml\SNMP.xml"
# 加载XML文件
$xml = [xml](Get-Content -Path $xmlPath)
# 获取Notificationlist下的所有元素节点(过滤掉空白文本节点)
$notificationNodes = $xml.Configuration.Notificationlist.ChildNodes | 
    Where-Object { $_.NodeType -eq [System.Xml.XmlNodeType]::Element }

2. 按值分组收集节点名称

分别筛选出值为Enable和Disable的节点名称,存入两个数组:

# 收集所有值为Enable的节点名称
$enableNodes = $notificationNodes | 
    Where-Object { $_.InnerText -eq 'Enable' } | 
    Select-Object -ExpandProperty LocalName

# 收集所有值为Disable的节点名称
$disableNodes = $notificationNodes | 
    Where-Object { $_.InnerText -eq 'Disable' } | 
    Select-Object -ExpandProperty LocalName

3. 格式化输出为指定表格样式

为了对齐输出,需要循环遍历两个数组的最大长度,逐行输出对应内容:

# 输出表头
"Enable        Disable"
"------        -------"

# 确定最长数组的长度
$maxCount = [Math]::Max($enableNodes.Count, $disableNodes.Count)

# 逐行输出内容
for ($i = 0; $i -lt $maxCount; $i++) {
    $enableItem = if ($i -lt $enableNodes.Count) { $enableNodes[$i] } else { "" }
    $disableItem = if ($i -lt $disableNodes.Count) { $disableNodes[$i] } else { "" }
    # 格式化对齐(这里用14个字符宽度对齐Enable列)
    "{0,-14}{1}" -f $enableItem, $disableItem
}

运行结果

执行上述代码后,会输出你需要的格式:

Enable        Disable
------        -------
SendEmail     SendSnmp
SignInEmail   SignInSnmp
              TooManyLoginEmail
              TooManyLoginSnmp

内容的提问来源于stack exchange,提问作者Divyesh Jesadiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:03:14