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

求助:如何将PowerShell的systeminfo转换为结构化JSON/XML

解决SystemInfo转结构化JSON/XML的问题

我太懂你遇到的这个头疼问题了——直接跑systeminfo | ConvertTo-Json得到的是一堆零散的字符串数组,完全不是你需要的键值对结构;XML那边更离谱,生成的全是<Object Type="System.String">节点,根本没有任何结构化信息。核心原因是**systeminfo输出的是纯文本行,不是PowerShell原生的结构化对象**,所以转换命令只能把每个字符串当成独立元素处理,自然得不到你想要的格式。

下面是两种格式的具体解决方法,直接就能用:

一、生成结构化JSON

我们需要先把systeminfo的纯文本解析成键值对哈希表,再转成标准JSON:

# 1. 初始化哈希表存储键值对
$systemInfoMap = @{}

# 2. 解析systeminfo输出,过滤并提取有效键值对
systeminfo | 
    # 只保留符合"键: 值"格式的有效行
    Where-Object { $_ -match '^(.+?):\s+(.+)$' } | 
    ForEach-Object {
        $key = $matches[1].Trim()
        $value = $matches[2].Trim()
        $systemInfoMap[$key] = $value
    }

# 3. 转换为结构化JSON
$systemInfoMap | ConvertTo-Json

这段代码的关键是用正则^(.+?):\s+(.+)$精准匹配键: 值格式的行,非贪婪匹配第一个冒号,确保值里的特殊符号(比如BIOS版本里的逗号加日期)不会被误分割。最终输出的JSON就是你想要的"Host Name": "namehere"这种清晰的键值对结构。

二、生成结构化XML

同样先解析成结构化对象,再用ConvertTo-Xml生成规范的XML:

# 1. 先解析为键值对哈希表(和JSON步骤一致)
$systemInfoMap = @{}
systeminfo | 
    Where-Object { $_ -match '^(.+?):\s+(.+)$' } | 
    ForEach-Object {
        $key = $matches[1].Trim()
        $value = $matches[2].Trim()
        $systemInfoMap[$key] = $value
    }

# 2. 转换为结构化XML(自定义根节点名称)
$systemInfoMap | ConvertTo-Xml -As Document -RootName "SystemInformation"

生成的XML会有一个整洁的<SystemInformation>根节点,每个系统信息项作为子节点,比如:

<?xml version="1.0" encoding="utf-8"?>
<SystemInformation>
  <Property Name="Host Name">namehere</Property>
  <Property Name="OS Name">Microsoft Windows 10 Enterprise</Property>
  <!-- 其他系统信息节点 -->
</SystemInformation>

这样的XML完全是结构化的,后续解析或者导入其他系统都很方便。

内容的提问来源于stack exchange,提问作者Harsha Laxman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:33:07