API d’inventaire Power Platform

L’API d’inventaire vous permet d’exécuter des requêtes structurées sur Azure Resource Graph à l’aide d’une requête POST avec une spécification de requête dans le corps de la requête. L’API traduit votre spécification de requête en Kusto Query Language (KQL) pour l’exécution sur Azure Resource Graph. L’API d’inventaire pour ressources fait partie de la documentation de référence de l’API Power Platform. Pour obtenir la liste complète des types de ressources et des champs interrogeables, consultez la référence du schéma d’inventaire Power Platform.

Point de terminaison d’API


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

Corps de la demande

Le corps de la requête doit contenir une spécification de requête avec la structure suivante :

Structure de requête

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

Propriétés

Propriété Type Obligatoire Description
TableName ficelle Oui Type de table/ressource cible à interroger (par exemple, « PowerPlatformResources »)
Clauses tableau Oui Tableau de clauses de requête qui définissent les opérations à effectuer
Options Objet Non Options de requête Azure Resource Graph pour la pagination et le contrôle de résultat

Options de requête

L’objet Options prend en charge les paramètres de requête d'Azure Resource Graph pour la pagination et le contrôle des résultats. Pour en savoir plus, consultez ResourceQueryRequestOptions la documentation .

Clauses de requête prises en charge

L’API prend en charge les types de clauses mis en surbrillance dans cette section via la sérialisation JSON polymorphe. Chaque type de clause correspond aux opérateurs KQL comme documentés dans la référence KQL :

Clause Where

Filtre les données en fonction des conditions de champ. Traduit en opérateur KQLwhere.

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

Opérateurs pris en charge : L’API prend en charge tous les opérateurs de comparaison et de chaîne KQL standard. Pour obtenir la liste complète des opérateurs disponibles, consultez la documentation sur les opérateurs de chaîne KQL et les opérateurs numériques .

Exemple :

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

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

Clause de projet

Sélectionne des champs spécifiques dans les résultats. Traduit en opérateur KQLproject.

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

Exemple :

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

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

Take (clause)

Limite le nombre de résultats retournés. Traduit en opérateur KQLtake.

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

Traduit en KQL :| take 50

Order by, clause

Trie les résultats par champs spécifiés. Traduit en opérateur KQLsort.


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

Exemple :

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

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

Clause distincte

Retourne des valeurs uniques pour les champs spécifiés. Traduit en opérateur KQLdistinct.


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

Traduit en KQL :| distinct field1, field2

Clause Count

Retourne le nombre d’enregistrements correspondants. Traduit en opérateur KQLcount.

{
  "$type": "count"
}

Traduit en KQL :| count

Résumé de la clause

Agrège les données à l’aide des opérations count ou argmax. Traduit en opérateur KQLsummarize.

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

Opérateurs pris en charge :

  • count count() → : nombre d’enregistrements regroupés par champs spécifiés.
  • argmax arg_max() → - Obtenir des enregistrements avec une valeur maximale dans le champ spécifié.

Exemple de comptage :

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

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

Exemple ArgMax :

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

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

Étendre la clause

Ajoute des colonnes calculées aux résultats. Traduit en opérateur KQLextend.

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

Exemple :

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

Traduit en KQL :| extend environmentId = tostring(properties.environmentId)https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/scalarfunctions) pour les fonctions disponibles.

Join (clause)

Jointure avec une autre table/sous-requête. Traduit en opérateur KQLjoin.


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

Types de jointure pris en charge : L’API prend en charge tous les types de jointure KQL. Pour obtenir la liste complète des types de jointure disponibles et de leur comportement, consultez la documentation de l’opérateur de jointure KQL.

Exemple (jointure de ressources Power Platform avec des informations d’environnement) :

{
  "$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"
}

Traduit 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

Exemples de requêtes complets

Exemple : Requête de ressource Power Platform de base (modèle par défaut du Centre d’administration Power Platform)

Obtenez toutes les ressources Power Platform avec des informations d’environnement : il s’agit de la requête par défaut utilisée par le Centre d’administration 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 équivalent :

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

Exemple : Compter les ressources Power Platform par type et emplacement

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

KQL équivalent :

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

Exemple : requête d'applications sur canevas simples

Obtenez des applications Canvas avec un filtrage et une projection de base.

{
  "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 équivalent :

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

Exemple : Filtrer les ressources par environnement et plage de dates

{
  "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"
      }
    }
  ]
}

Traduit 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

Format de réponse

L’API retourne un objet ResourceQueryResult à partir du Kit de développement logiciel (SDK) Azure Resource Graph. Cet objet contient les résultats de la requête et les métadonnées concernant l’exécution de la requête.

Structure de réponse :

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