如何在PowerShell中提取并格式化JSON中的软件名称与版本
PowerShell 实现方案
假设你的JSON结构类似这样(示例):
{ "provisioners": [ { "scripts": [ "packer install --softwareName test-package --Version 1.0.0", "packer install --softwareName other-package --Version 2.3.4", "packer install --softwareName test-package --Version 1.1.0" ] } ] }
以下是完整的实现代码:
# 读取并解析JSON文件 $jsonObj = Get-Content -Path "path/to/your/file.json" | ConvertFrom-Json # 提取所有包含test-package的脚本命令,再解析出softwareName和Version $results = $jsonObj.provisioners.scripts | Where-Object { $_ -match "test-package" } | ForEach-Object { # 用正则匹配命令行中的参数值 if ($_ -match '--softwareName (\S+) --Version (\S+)') { [PSCustomObject]@{ SoftwareName = $matches[1] Version = $matches[2] } } } # 输出格式化表格 $results | Format-Table -AutoSize
关键说明
- 正则匹配:
--softwareName (\S+) --Version (\S+)用于精准匹配命令行中的两个参数,(\S+)捕获非空格的参数值作为分组,通过$matches变量提取对应的值。 - 自定义对象:通过
[PSCustomObject]构建结构化数据,方便后续格式化输出。 - 筛选逻辑:
Where-Object { $_ -match "test-package" }快速过滤出目标命令行条目。
如果你的命令行参数顺序可能变化,可以调整正则为更灵活的形式,比如分别匹配两个参数:
if ($_ -match '--softwareName (\S+)' -and $_ -match '--Version (\S+)') { [PSCustomObject]@{ SoftwareName = $matches[1] Version = $matches[2] } }
内容的提问来源于stack exchange,提问作者HiRabba40
相关产品推荐
相关产品推荐

