PowerShell中如何通过Azure CLI拆分匹配连续WebJob的名称与状态
问题根因
现有脚本存在两个核心问题:
- 两次独立调用az cli命令分别拉取WebJob名称、状态,两个返回结果是独立的TSV字符串集合,没有内置的关联机制,无法保证顺序一一匹配
- 手动通过
Split('}')拆分字符串解析JSON结构的方式容错率极低,只要WebJob名称包含特殊字符就会解析错乱
正确实现方案
全程使用az cli官方的结构化输出能力,不需要手动拆分字符串,一次性获取全量WebJob属性完成匹配。
核心改动点
- 取消两次分别拉取name、status的TSV输出逻辑,改为单次调用az cli获取JSON格式的全量WebJob列表
- 通过PowerShell内置的
ConvertFrom-Json将JSON文本转换为强类型对象数组,每个数组元素天然对应一个独立WebJob,自带name、status等属性
改动后的完整可运行脚本
$groups = Get-AzResourceGroup | Where-Object {$_.ResourceGroupName -like "*Dev*"} foreach($group in $groups){ Write-Host -ForegroundColor Cyan "processing resourceGroup: $($group.ResourceGroupName)" $webApps = Get-AzWebApp -ResourceGroupName $group.ResourceGroupName foreach($webApp in $webApps){ Write-Host -ForegroundColor Yellow "Current WebApp: $($webApp.Name)" # 单次调用获取结构化连续WebJob列表 $continuousWebJobs = az webapp webjob continuous list ` --name $webApp.Name ` --resource-group $group.ResourceGroupName ` -o json | ConvertFrom-Json # 跳过无连续WebJob的应用 if(-not $continuousWebJobs){ Write-Host "No continuous WebJob found." continue } # 逐行输出WebJob名称与对应状态 foreach($job in $continuousWebJobs){ Write-Host "$($job.name) $($job.status)" # 如需仅筛选停止状态的WebJob,添加以下判断即可 # if($job.status -eq 'Stopped'){ # Write-Host "$($job.name) $($job.status)" # } } } }
注意事项
- 禁止用手动拆分字符串的方式解析az cli返回的JSON结构,特殊字符场景下必然出现解析错误
- 禁止拆分多次调用az cli获取不同属性,两次调用间如果WebJob列表发生变更,会直接导致名称与状态匹配错位
内容的提问来源于stack exchange,提问作者Franz L
相关产品推荐
相关产品推荐

