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

基于dz121.xml创建哈希表的PowerShell脚本存在什么问题?

转换脚本的问题分析

你的转换哈希表脚本存在以下关键问题:

  • 节点层级遍历错误:$XMLdata.ChildNodes 获取的是XML文档的顶级节点(比如 <Objects>),这个节点本身没有实际属性值(Value 为空),且你未深入到存储进程数据的 <Object> 和 <Property> 子节点,导致哈希表无法提取进程的Name、ID等有效数据。

  • 未处理多进程的XML结构:生成的XML中,每个进程对应一个 <Object> 节点,每个 <Object> 下的 <Property> 才是真正的键值对(Name/Value)。你的脚本完全没有遍历这些子节点,自然无法获取到进程的具体信息。

  • 哈希表结构设计冲突:如果强行把所有进程的属性塞进同一个哈希表,会出现键名重复(比如多个进程都有Name、ID键),后写入的内容会覆盖之前的,最终只能保留最后一个进程的部分数据,这不符合提取所有进程信息的需求。

修正后的脚本示例

如果要将每个进程转换为一个哈希表,最终得到哈希表数组,可使用以下脚本:

$XMLdata = [xml]$(Get-Content .\dz121.xml)
$processHashes = @()

# 遍历每个进程对应的<Object>节点
$XMLdata.Objects.Object | ForEach-Object {
    $processHash = @{}
    # 遍历当前进程的所有<Property>节点,提取键值对
    $_.Property | ForEach-Object {
        $processHash[$_.Name] = $_.InnerText
    }
    $processHashes += $processHash
}

# 输出所有进程的哈希表
$processHashes

如果仅需要提取单个进程的哈希表(比如第一个进程),可简化为:

$XMLdata = [xml]$(Get-Content .\dz121.xml)
$ht = @{}
$XMLdata.Objects.Object[0].Property | ForEach-Object {
    $ht[$_.Name] = $_.InnerText
}
$ht

内容的提问来源于stack exchange,提问作者Расим Гусаинов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:41:24