如何将微软工具返回的分号分隔键值对字符串转换为PowerShell对象?
快速转换分号分隔键值对为PowerShell对象
我完全懂你不想重复造轮子的想法——确实不用自己逐段解析,咱们可以利用PowerShell现有命令来快速转换,这里有两个最直接的方案:
方案1:转成JSON后用ConvertFrom-Json(最通用)
这种方法核心是把你的字符串格式转换成标准JSON,再用原生命令解析,步骤清晰且适配同类型的键值对格式:
# 定义输入字符串 $inputStr = "Author: First.Last; Name: RootConfiguration; Version: 2.0.0; GenerationDate: 06/01/2022 13:18:10; GenerationHost: Server;" # 处理成标准JSON格式 $jsonStr = "{" + ($inputStr.TrimEnd(';') -replace '(\w+):\s*(.*?)(?=;|$)', '"$1": "$2"' -replace ';', ',') + "}" # 转换为PowerShell对象 $configObj = $jsonStr | ConvertFrom-Json # 验证结果(示例) $configObj.Author $configObj.GenerationDate
关键步骤解释:
TrimEnd(';'):移除字符串末尾多余的分号,避免生成无效JSON- 第一个正则
-replace '(\w+):\s*(.*?)(?=;|$)', '"$1": "$2"':精准匹配键: 值格式,给键和值都加上双引号,转换成JSON标准键值对 -replace ';', ',':把分号分隔符替换成JSON要求的逗号分隔符- 最后用
{}包裹,形成完整的JSON对象结构
方案2:用ConvertFrom-String(适合固定格式场景)
如果你的字符串格式完全固定,也可以用ConvertFrom-String配合模板直接提取字段,可读性更强:
# 定义输入字符串 $inputStr = "Author: First.Last; Name: RootConfiguration; Version: 2.0.0; GenerationDate: 06/01/2022 13:18:10; GenerationHost: Server;" # 创建匹配格式的模板 $template = @' Author: {Author*: First.Last}; Name: {Name: RootConfiguration}; Version: {Version: 2.0.0}; GenerationDate: {GenerationDate: 06/01/2022 13:18:10}; GenerationHost: {GenerationHost: Server}; '@ # 转换为对象 $configObj = $inputStr | ConvertFrom-String -TemplateContent $template # 验证结果(示例) $configObj.Name $configObj.Version
模板说明:
{字段名: 示例值}:告诉ConvertFrom-String按照这个格式提取对应字段的内容{Author*: ...}中的*表示这是必填的锚点字段,帮助命令更准确地匹配整体格式
这两种方法都不用手动写循环逐段解析,完全复用了PowerShell的原生命令,完美贴合你“避免重复造轮子”的需求。
内容的提问来源于stack exchange,提问作者Kevin Weinrich
相关产品推荐
相关产品推荐

