PowerShell批量解析含可变节点的JSON文件获取referenceName值
解决PowerShell提取动态路径JSON节点的问题
你遇到的核心问题是PowerShell原生属性访问不支持通配符匹配动态属性名,得通过遍历对象属性的方式提取referenceName。下面是通用处理脚本,不管referenceName在actions还是triggers下的任意子节点里,都能自动提取:
# 先定位到固定的definition节点(两个JSON里这个路径一致) $definition = $Workflow_Info.properties.files."Test_email/workflow.json".definition # 准备数组存储所有找到的referenceName $referenceNames = @() # 遍历actions下的所有动态节点 if ($definition.actions) { foreach ($actionItem in $definition.actions.PSObject.Properties.Value) { # 检查当前节点是否包含目标路径,存在则加入结果数组 if ($actionItem.inputs.host.connection.referenceName) { $referenceNames += $actionItem.inputs.host.connection.referenceName } } } # 遍历triggers下的所有动态节点 if ($definition.triggers) { foreach ($triggerItem in $definition.triggers.PSObject.Properties.Value) { if ($triggerItem.inputs.host.connection.referenceName) { $referenceNames += $triggerItem.inputs.host.connection.referenceName } } } # 输出所有提取到的值 $referenceNames
关键说明:
- PowerShell将JSON解析为PSObject后,动态节点名(比如
Send_an_email_from_a_shared_mailbox_(V2))会成为对象属性,无法用*直接匹配,必须通过PSObject.Properties.Value遍历所有属性值。 - 脚本会先检查
actions和triggers是否存在(避免不存在时抛出错误),再逐个遍历子节点,只要找到符合inputs.host.connection.referenceName路径的值就收集起来。 - 批量处理数百个JSON文件时,只需把读取JSON的逻辑(比如
Get-Content 目标文件路径 | ConvertFrom-Json)套入循环即可。
内容的提问来源于stack exchange,提问作者Joy
相关产品推荐
相关产品推荐

