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

PowerShell脚本增强:提取Operator实体的Id与RatedOI

解决方案:PowerShell脚本修改方案

首先,别用正则处理JSON——这是新手最容易踩的坑,PowerShell原生支持JSON解析,比正则靠谱100倍,还能避免匹配不全、格式变动失效的问题。以下是针对你需求的具体实现:

核心思路

  • 先把JSON内容转换成PowerShell对象,遍历实体列表
  • 实时跟踪每个Operator实体的前置Id
  • 定位Operator实体后第一个带RatedOI的条目
  • 直接跳过带有Characteristics: []的Operator实体

修改后的脚本示例

# 读取JSON文件(或直接传入JSON字符串)
$jsonContent = Get-Content -Path "your-target-file.json" -Raw | ConvertFrom-Json

# 初始化变量跟踪前置Id、存储结果
$lastValidId = $null
$outputResults = @()

# 遍历所有实体
foreach ($entity in $jsonContent.Entities) {
    # 更新前置Id:只要当前实体有Id,就覆盖为最新值
    if ($entity.Id) {
        $lastValidId = $entity.Id
    }

    # 检查当前实体是否为Operator
    if ($entity.EntityType -eq "Operator") {
        # 跳过带有Characteristics数组的情况
        if ($entity.Characteristics -is [array]) {
            continue
        }

        # 查找该Operator之后第一个带RatedOI的实体
        $firstRatedOI = $jsonContent.Entities | Where-Object {
            $_.PSObject.Properties.Name -contains "RatedOI" -and
            $jsonContent.Entities.IndexOf($_) -gt $jsonContent.Entities.IndexOf($entity)
        } | Select-Object -First 1

        # 收集有效结果
        if ($lastValidId -and $firstRatedOI) {
            $outputResults += [PSCustomObject]@{
                PrecedingId = $lastValidId
                RatedOI     = $firstRatedOI.RatedOI
            }
        }
    }
}

# 输出最终结果
$outputResults

关键说明

  • 弃用正则:JSON的嵌套结构、换行/空格变动都会让正则匹配失效,用ConvertFrom-Json转成对象是最稳妥的方案
  • 前置Id跟踪:遍历过程中随时更新$lastValidId,确保遇到Operator时拿到的是紧邻上方的第一个有效Id
  • 精准跳过无效项:通过-is [array]直接判断Characteristics是否为数组类型,符合条件则跳过
  • 全量匹配结果:遍历所有实体并收集符合要求的条目,不会只返回首个匹配项

验证注意事项

如果你的JSON示例中有两个符合条件的Operator实体,运行脚本会返回两条结果。若仍有问题,检查JSON结构是否正确:确保Entities是数组类型,实体属性名称(如Id、EntityType、RatedOI)的大小写和脚本一致(PowerShell默认区分大小写)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:40:03