如何使用PowerShell读取Azure REST API返回对象中的指定值
捕获Azure OpenAI指标数据中的第二个动态值
你需要在每次REST调用后,从返回的$restcall.value.timeseries.data数组中提取第二个元素(PowerShell数组索引从0开始,对应索引[1]),并将其与当前循环的上下文信息绑定保存,避免值被后续循环覆盖。
修改后的完整代码如下:
Select-AzSubscription -SubscriptionId $subId # 变量定义 $metricname = "GeneratedTokens", "TokenTransaction","ProcessedPromptTokens", "Latency" $aggtype = "Total", "Average", "Maximum" $timespan = "2023-12-25T11:05:00.000Z/2024-02-14T11:05:00.000Z" # 用于存储捕获的结果 $capturedResults = @() # 获取OpenAI账号 $res = Get-AzCognitiveServicesAccount $openaiAcc = $res | Where-Object {$_.Endpoint -match 'openai.azure.com/'} # 生成Bearer令牌 $accesstoken = (Get-AzAccessToken).Token $headers = @{ 'Authorization' = "Bearer $accesstoken" } foreach($openai in $openaiAcc){ $openaiName = $openai.Name $openaiId = $openai.id $subscriptionId = $openaiId.split('/')[2] $RGName = $openai.ResourceGroupName foreach($metric in $metricname){ Write-Host "当前指标: $metric" foreach($agg in $aggtype){ $url = "https://management.azure.com/$openaiId/providers/Microsoft.Insights/metrics?timespan=$timespan&metricnames=$metric&aggregation=$agg&api-version=2023-10-01&interval=FULL" $restcall = Invoke-RestMethod -Method GET -Uri $url -Headers $headers $object = $restcall.value.timeseries.data # 捕获第二个值(索引[1]),并保存上下文信息 if ($object.Count -ge 2) { $secondValue = $object[1] $resultObj = [PSCustomObject]@{ OpenAIAccount = $openaiName ResourceGroup = $RGName MetricName = $metric AggregationType = $agg SecondDataValue = $secondValue } $capturedResults += $resultObj Write-Host "已捕获[$openaiName]-[$metric]-[$agg]的第二个数据值: $secondValue" } else { Write-Warning "[$openaiName]-[$metric]-[$agg]的返回数据不足2个,无法捕获第二个值" } } } } # 输出所有捕获的结果 $capturedResults
关键说明:
- 新增
$capturedResults数组存储每次循环的捕获结果,避免值被后续循环覆盖 - 用
[PSCustomObject]封装OpenAI账号、指标名、聚合类型等上下文信息和目标值,方便后续查看、导出或处理 - 添加判断逻辑防止返回数据不足2个时出现索引越界错误
- 最终可直接查看捕获结果,或导出为CSV文件(如
$capturedResults | Export-Csv -Path "OpenAI_Metrics_SecondValues.csv" -NoTypeInformation)
内容的提问来源于stack exchange,提问作者Subhransu Sekhar
相关产品推荐
相关产品推荐

