API de inventario de Power Platform

La API de inventario permite ejecutar consultas estructuradas en Azure Resource Graph mediante una solicitud POST con una especificación de consulta en el cuerpo de la solicitud. La API traduce la especificación de consulta en Kusto Query Language (KQL) para su ejecución en Azure Resource Graph. La API de inventario para recursos forma parte de la documentación de referencia de Power Platform API. Para obtener una lista completa de los tipos de recursos y los campos consultables, consulte Referencia de esquema de inventario de Power Platform.

Punto de conexión de la API


POST {PowerPlatformAPI url}/resourcequery/resources/query?api-version=2024-10-01

Cuerpo de la solicitud

El cuerpo de la solicitud debe contener una especificación de consulta con la siguiente estructura:

Estructura de la solicitud de consulta

{
  "TableName": "string",
  "Clauses": [
    {
      "$type": "clause_type",
      // clause-specific properties
    }
  ],
  "Options": {
    "Top": 100,
    "Skip": 0,
    "SkipToken": "string"
  }
}

Propiedades

Propiedad Tipo Obligatorio Descripción
TableName string Tipo de tabla o recurso de destino que se va a consultar (es decir, "PowerPlatformResources")
Clauses array Matriz de cláusulas de consulta que definen las operaciones que se van a realizar
Options objeto No Opciones de consulta de Azure Resource Graph para la paginación y el control de resultados

Opciones de consulta

El Options objeto admite parámetros de consulta de Azure Resource Graph para la paginación y el control de resultados. Consulte ResourceQueryRequestOptions la documentación para obtener más información.

Cláusulas de consulta compatibles

La API admite los tipos de cláusula resaltados en esta sección mediante la serialización JSON polimórfica. Cada tipo de cláusula corresponde a los operadores KQL como se documenta en la referencia de KQL:

Cláusula WHERE

Filtra los datos en función de las condiciones del campo. Se traduce en el operador KQLwhere.

{
  "$type": "where",
  "FieldName": "string",
  "Operator": "string",
  "Values": ["string1", "string2"]
}

Operadores admitidos: La API admite todos los operadores de cadena y comparación de KQL estándar. Para obtener una lista completa de los operadores disponibles, consulte la documentación sobre operadores de cadena y operadores numéricos de KQL.

Example:

{
  "$type": "where",
  "FieldName": "type",
  "Operator": "in~",
  "Values": ["'microsoft.powerapps/canvasapps'", "'microsoft.copilotstudio/agents'"]
}

Se traduce en KQL:| where type in~ ('microsoft.powerapps/canvasapps', 'microsoft.copilotstudio/agents')

Cláusula de Proyecto

Selecciona campos específicos en los resultados. Se traduce en el operador KQLproject.

{
  "$type": "project",
  "FieldList": ["field1", "field2", "field3"]
}

Example:

{
  "$type": "project",
  "FieldList": [
    "name", 
    "properties.displayName", 
    "environmentId = tostring(properties.environmentId)",
    "createdDate = properties.createdAt"
  ]
}

Se traduce en KQL:| project name, properties.displayName, environmentId = tostring(properties.environmentId), createdDate = properties.createdAt

Take (cláusula)

Limita el número de resultados devueltos. Se traduce en el operador KQLtake.

{
  "$type": "take",
  "TakeCount": 50
}

Se traduce en KQL:| take 50

Cláusula Order by

Ordena los resultados por campos especificados. Se traduce en el operador KQLsort.


{
  "$type": "orderby",
  "FieldNamesAscDesc": {
    "field1": "asc",
    "field2": "desc"
  }
}

Example:

{
  "$type": "orderby",
  "FieldNamesAscDesc": {
    "tostring(properties.createdAt)": "desc",
    "properties.displayName": "asc"
  }
}

Se traduce en KQL:| sort by tostring(properties.createdAt) desc, properties.displayName asc

Cláusula distinta

Devuelve valores únicos para los campos especificados. Se traduce en el operador KQLdistinct.


{
  "$type": "distinct",
  "FieldList": ["field1", "field2"]
}

Se traduce en KQL:| distinct field1, field2

Cláusula de Conteo

Devuelve el recuento de registros coincidentes. Se traduce en el operador KQLcount.

{
  "$type": "count"
}

Se traduce en KQL:| count

Cláusula Resumir

Agrega datos mediante operaciones count o argmax. Se traduce en el operador KQLsummarize.

{
  "$type": "summarize",
  "SummarizeClauseExpression": {
    "OperatorName": "count|argmax",
    "OperatorFieldName": "string",
    "FieldList": ["field1", "field2"]
  }
}

Operadores de admitidos:

  • count count() →: recuento de registros agrupados por campos especificados.
  • argmax arg_max() →: obtiene registros con el valor máximo en el campo especificado.

Ejemplo de recuento:

{
  "$type": "summarize",
  "SummarizeClauseExpression": {
    "OperatorName": "count",
    "OperatorFieldName": "resourceCount",
    "FieldList": ["resourceGroup", "type"]
  }
}

Se traduce en KQL:| summarize resourceCount = count() by resourceGroup, type

Ejemplo de ArgMax:

{
  "$type": "summarize",
  "SummarizeClauseExpression": {
    "OperatorName": "argmax",
    "OperatorFieldName": "createdTime",
    "FieldList": ["resourceGroup"]
  }
}

Se traduce en KQL:| summarize arg_max(createdTime, *) by resourceGroup

Cláusula de extensión

Agrega columnas calculadas a los resultados. Se traduce en el operador KQLextend.

{
  "$type": "extend",
  "FieldName": "newFieldName",
  "Expression": "KQL_EXPRESSION"
}

Example:

{
  "$type": "extend",
  "FieldName": "environmentId",
  "Expression": "tostring(properties.environmentId)"
}

Se traduce en KQL:| extend environmentId = tostring(properties.environmentId)https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/scalarfunctions) para funciones disponibles.

Cláusula de Unión

Se une con otra tabla/subconsulta. Se traduce en el operador KQLjoin.


{
  "$type": "join",
  "RightTable": {
    "TableName": "string",
    "Clauses": []
  },
  "JoinKind": "string",
    "LeftColumnName": "string",
  "RightColumnName": "string"
}

Tipos de combinación admitidos: La API admite todos los tipos de combinación KQL. Para obtener una lista completa de los tipos de combinación disponibles y su comportamiento, consulte la documentación del operador KQL join.

Ejemplo (unión de recursos de Power Platform con información del entorno):

{
  "$type": "join",
  "JoinKind": "leftouter",
  "RightTable": {
    "TableName": "PowerPlatformResources",
    "Clauses": [
      {
        "$type": "where",
        "FieldName": "type",
        "Operator": "==",
        "Values": ["'microsoft.powerplatform/environments'"]
      },
      {
        "$type": "project",
        "FieldList": [
          "environmentId = name",
          "environmentName = properties.displayName",
          "environmentRegion = location",
          "environmentType = properties.environmentType",
          "isManagedEnvironment = properties.isManaged"
        ]
      }
    ]
  },
  "LeftColumnName": "environmentId",
  "RightColumnName": "environmentId"
}

Se traduce en KQL:| join kind=leftouter (PowerPlatformResources | where type == 'microsoft.powerplatform/environments' | project environmentId = name, environmentName = properties.displayName, environmentRegion = location, environmentType = properties.environmentType, isManagedEnvironment = properties.isManaged) on $left.environmentId == $right.environmentId

Ejemplos de consultas completos

Ejemplo: Consulta básica de recursos de Power Platform (patrón predeterminado del Centro de administración de Power Platform)

Obtenga todos los recursos de Power Platform con información del entorno; esta es la consulta predeterminada que usa el Centro de administración de Power Platform.

{
  "Options": {
    "Top": 1000,
    "Skip": 0,
    "SkipToken": ""
  },
  "TableName": "PowerPlatformResources",
  "Clauses": [
    {
      "$type": "extend",
      "FieldName": "joinKey",
      "Expression": "tolower(tostring(properties.environmentId))"
    },
    {
      "$type": "join",
      "JoinKind": "leftouter",
      "RightTable": {
        "TableName": "PowerPlatformResources",
        "Clauses": [
          {
            "$type": "where",
            "FieldName": "type",
            "Operator": "==",
            "Values": ["'microsoft.powerplatform/environments'"]
          },
            {
            "$type": "project",
            "FieldList": [
              "joinKey = tolower(name)",
              "environmentName = properties.displayName",
              "environmentRegion = location",
              "environmentType = properties.environmentType",
              "isManagedEnvironment = properties.isManaged"
            ]
          }
        ]
      },
      "LeftColumnName": "joinKey",
      "RightColumnName": "joinKey"
    },
    {
      "$type": "where",
      "FieldName": "type",
      "Operator": "in~",
      "Values": [
        "'microsoft.powerapps/canvasapps'",
        "'microsoft.powerapps/modeldrivenapps'",
        "'microsoft.powerautomate/cloudflows'",
        "'microsoft.copilotstudio/agents'",
        "'microsoft.powerautomate/agentflows'",
        "'microsoft.powerapps/codeapps'"
      ]
    },
    {
      "$type": "orderby",
      "FieldNamesAscDesc": {
        "tostring(properties.createdAt)": "desc"
      }
    }
  ]
}

KQL equivalente:

PowerPlatformResources
| extend joinKey = tolower(tostring(properties.environmentId))
| join kind=leftouter (
    PowerPlatformResources
    | where type == 'microsoft.powerplatform/environments'
    | project joinKey = tolower(name), environmentName = properties.displayName, environmentRegion = location, environmentType = properties.environmentType, isManagedEnvironment = properties.isManaged
  ) on $left.joinKey == $right.joinKey
| where type in~ ('microsoft.powerapps/canvasapps', 'microsoft.powerapps/modeldrivenapps', 'microsoft.powerautomate/cloudflows', 'microsoft.copilotstudio/agents', 'microsoft.powerautomate/agentflows', 'microsoft.powerapps/codeapps')
| order by tostring(properties.createdAt) desc

Ejemplo: Recuento de recursos de Power Platform por tipo y ubicación

{
  "TableName": "PowerPlatformResources",
  "Clauses": [
    {
      "$type": "summarize",
      "SummarizeClauseExpression": {
        "OperatorName": "count",
        "OperatorFieldName": "resourceCount",
        "FieldList": ["type", "location"]
      }
    },
    {
      "$type": "orderby",
      "FieldNamesAscDesc": {
        "resourceCount": "desc"
      }
    }
  ]
}

KQL equivalente:

PowerPlatformResources
| summarize resourceCount = count() by type, location
| sort by resourceCount desc

Ejemplo: Consulta de aplicaciones Canvas simples

Obtenga aplicaciones de lienzo con filtrado y proyección básicos:

{
  "TableName": "PowerPlatformResources",
  "Clauses": [
    {
      "$type": "where",
      "FieldName": "type",
      "Operator": "==",
      "Values": ["'microsoft.powerapps/canvasapps'"]
    },
    {
      "$type": "project",
      "FieldList": [
        "name",
        "location",
        "properties.displayName",
        "properties.createdAt",
        "properties.environmentId"
      ]
    },
    {
      "$type": "take",
      "TakeCount": 100
    }
  ]
}

KQL equivalente:

PowerPlatformResources
| where type == 'microsoft.powerapps/canvasapps'
| project name, location, properties.displayName, properties.createdAt, properties.environmentId
| take 100

Ejemplo: Filtrado de recursos por entorno y intervalo de fechas

{
  "TableName": "PowerPlatformResources",
  "Clauses": [
    {
      "$type": "where",
      "FieldName": "type",
      "Operator": "==",
      "Values": ["'microsoft.powerapps/canvasapps'"]
    },
    {
      "$type": "where",
      "FieldName": "properties.environmentId",
      "Operator": "==",
      "Values": ["your-environment-id"]
    },
    {
      "$type": "extend",
      "FieldName": "createdDate",
      "Expression": "todatetime(properties.createdAt)"
    },
    {
      "$type": "where",
      "FieldName": "createdDate",
      "Operator": ">=",
      "Values": ["datetime(2024-01-01)"]
    },
    {
      "$type": "project",
      "FieldList": [
        "name",
        "properties.displayName",
        "properties.createdAt",
        "properties.createdBy",
        "properties.ownerId"
      ]
    },
    {
      "$type": "orderby",
      "FieldNamesAscDesc": {
        "createdDate": "desc"
      }
    }
  ]
}

Se traduce en KQL:

PowerPlatformResources
| where type == 'microsoft.powerapps/canvasapps'
| where properties.environmentId == "your-environment-id"
| extend createdDate = todatetime(properties.createdAt)
| where createdDate >= datetime(2024-01-01)
| project name, properties.displayName, properties.createdAt, properties.createdBy, properties.ownerId
| sort by createdDate desc

Formato de respuesta

La API devuelve un ResourceQueryResult objeto del SDK de Azure Resource Graph. Este objeto contiene los resultados y metadatos de la consulta sobre la ejecución de la consulta.

Estructura de respuesta:

{
  "totalRecords": 1250,
  "count": 50,
  "resultTruncated": 1,
  "skipToken": "string_for_next_page",
  "data": [
    // Array of result objects based on your query
  ]
}