首页 > 解决方案 > 如何使用 azure get 命令和 powershell 设置数组

问题描述

我是一个完全的 Powershell 新手,还在学习。我正在尝试获取已在 webapp 中停止的 Azure Webjobs 列表。我明白当我运行命令 az webapp webjob Continuous list 时,我会得到一大组数组数据。

我在拆分时遇到了麻烦,有人可以建议我如何将其拆分为个人工作及其财产吗?我试过 $webjobs = ($webname.Split('}')) 并且它不会拆分巨大的数组。

这是我当前的代码

$groups = 获取-AzResourceGroup | where{$_.ResourceGroupName -like " Dev "} foreach($groups in $groups){

Write-Host -ForegroundColor Cyan "processing resourceGroup" $group.ResourceGroupName
$webApps = Get-AzWebApp -ResourceGroupName $group.ResourceGroupName

foreach($webApp in $webApps){
    
   write-host -ForegroundColor Yellow $webApp.Name        
    
   $webname = (az webapp webjob continuous list --name $webApp.Name --resource-group $group.ResourceGroupName --query '[].name' -o tsv)
   $webstatus = (az webapp webjob continuous list --name $webApp.Name --resource-group $group.ResourceGroupName --query '[].status' -o tsv)
   
   Write-host $webname
   Write-host $webstatus
           
    }
    }

我得到的结果是...

处理资源组 dev hub-dev-app-hub hubv3-dev-app-hub/Data hubv3-dev-app-hub/ProcessToolData hubv3-dev-app-hub/ToolDataNotifications hubv3-dev-app-hub/UploadLasToSftp hubv3-dev- app-hub/ApplicationInsightsProfiler3 hubv3-dev-app-hub/DaaS Running Running Running Running Running Stopped hubv3-dev-app-authservice hubv3-dev-app-authservice/ApplicationInsightsProfiler3 Running hubv3-dev-app-api hubv3-dev-app- api/ApplicationInsightsProfiler3 正在运行

我希望实现的是

hub-dev-app-hub hubv3-dev-app-hub/Data 运行 hubv3-dev-app-hub/ProcessToolData 运行 hubv3-dev-app-hub/ToolDataNotifications 运行 hubv3-dev-app-hub/UploadLasToSftp 运行 hubv3-dev -app-hub/ApplicationInsightsProfiler3 正在运行 hubv3-dev-app-hub/DaaS 已停止

任何帮助将不胜感激。

标签: azurepowershell

解决方案


您得到的结果是编写的代码所期望的。考虑到tsv docs,意味着$webname$webstatus是数组。当您编写Write-Host $webstatus它时,它将打印数组中的所有数据,在这种情况下:

Running
Running
Running
Running
Running
Stopped

您可以执行以下操作:

$webname = (az webapp webjob continuous list --name $webApp.Name --resource-group $group.ResourceGroupName --query '[].name' -o tsv)
$webstatus = (az webapp webjob continuous list --name $webApp.Name --resource-group $group.ResourceGroupName --query '[].status' -o tsv)

for ($i = 0; $i -lt $webname.length; $i++) {
    Write-Host $webname[$i]
    Write-Host $webstatus[$i]
}

但是你应该做的是使用另一个查询:[].[name, status]. 看看jmesPath

这更好,因为您只执行 1 个请求而不是 2 个请求,并且它应该具有您期望的格式,即名称和状态数组。

$webjobInfo = (az webapp webjob continuous list --name $webApp.Name --resource-group $group.ResourceGroupName --query '[].[name, status]' -o tsv)

Write-Host $webJobInfo

推荐阅读