如何修改Search-AzGraph查询以获取App Service Plan的操作系统信息
问题描述
通过以下Bicep文件部署App Service Plan:
param tags object param name string param location string = resourceGroup().location param skuName string = 'F1' resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = { name: name location: location properties:{ } tags: tags sku: { name: skuName } kind:'windows' } output resourceId string = appServicePlan.id
想要查询资源组内所有资源,针对Microsoft.Web/serverfarms类型的资源获取操作系统信息,使用了以下PowerShell命令:
Search-AzGraph -query "where resourceGroup in ($resourceGroupFilter) | project name, type, kind, location, resourceGroup, sku, OS = tostring(properties.kind) | order by name asc"
但查询返回的kind字段始终为functionApp,而非预期的Windows或Linux,需要修改查询以正确获取操作系统信息。
解决方案
方法一:通过properties.reserved字段判断(最可靠)
Azure中,Linux类型的App Service Plan会将properties.reserved设为true,Windows类型则为false,可以用Kusto的iff函数转换为明确的OS名称:
Search-AzGraph -query "where resourceGroup in ($resourceGroupFilter) | project name, type, location, resourceGroup, sku, OS = iff(type == 'Microsoft.Web/serverfarms', iff(properties.reserved == true, 'Linux', 'Windows'), 'N/A') | order by name asc"
方法二:解析kind字段的后缀
当App Service Plan用于托管函数应用时,kind字段格式为functionApp,<OS>;用于普通Web应用时为app,<OS>。可以通过split函数提取OS部分:
Search-AzGraph -query "where resourceGroup in ($resourceGroupFilter) | project name, type, kind, location, resourceGroup, sku, OS = iff(type == 'Microsoft.Web/serverfarms', split(kind, ',')[1], 'N/A') | order by name asc"
原因说明
- 原查询中
tostring(properties.kind)是错误的,App Service Plan的资源模型中不存在properties.kind字段,无法通过该路径获取OS信息。 - 你看到的
kind字段返回functionApp是因为该计划被配置为托管函数应用,kind字段会包含前缀标识(如functionApp),操作系统信息作为后缀存在于逗号分隔的字符串中。 properties.reserved是Azure区分App Service Plan操作系统的原生字段,比解析kind字段更可靠,不会受计划用途(Web/函数)的影响。
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

