API инвентаризации Power Platform

API инвентаризации позволяет выполнять структурированные запросы к Azure Resource Graph с помощью запроса POST со спецификацией запроса в тексте запроса. API преобразует спецификацию запроса в язык запросов Kusto (KQL) для выполнения в Azure Resource Graph. API инвентаризации для ресурсов является частью справочной документации по API Power Platform. Полный список типов ресурсов и запрашиваемых полей см. в справочнике по схеме инвентаризации Power Platform.

Конечная точка API


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

Текст запроса

Текст запроса должен содержать спецификацию запроса со следующей структурой:

Структура запроса

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

Свойства

Недвижимость Тип Обязательный Description
TableName string Да Целевой тип таблицы или ресурса для запроса (т. е. PowerPlatformResources)
Clauses массив Да Массив условий запроса, определяющих выполняемые операции
Options object Нет Параметры запроса Azure Resource Graph для пагинации и управления результатами.

Параметры запроса

Объект Options поддерживает параметры запроса Azure Resource Graph для разбивки на страницы и управления результатами. См. ResourceQueryRequestOptions документацию, чтобы узнать больше.

Поддерживаемые предложения запросов

API поддерживает типы предложений, выделенные в этом разделе, с помощью полиморфной сериализации JSON. Каждый тип предложения соответствует операторам KQL, как описано в справочнике по KQL:

Предложение Where

Фильтрует данные на основе условий поля. Преобразуется в оператор KQL where.

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

Поддерживаемые операторы: API поддерживает все стандартные операторы сравнения KQL и строк. Полный список доступных операторов см. в документации по строковым операторам KQL и числовым операторам .

Example:

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

Преобразуется в KQL:| where type in~ ('microsoft.powerapps/canvasapps', 'microsoft.copilotstudio/agents')

Пункт проекта

Выбирает определенные поля из результатов. Преобразуется в оператор KQL project.

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

Example:

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

Преобразуется в KQL:| project name, properties.displayName, environmentId = tostring(properties.environmentId), createdDate = properties.createdAt

Статья Take

Ограничивает количество возвращаемых результатов. Преобразуется в оператор KQL take.

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

Преобразуется в KQL:| take 50

Порядок по предложению

Сортирует результаты по указанным полям. Преобразуется в оператор KQL sort.


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

Example:

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

Преобразуется в KQL:| sort by tostring(properties.createdAt) desc, properties.displayName asc

Отдельный пункт

Возвращает уникальные значения для указанных полей. Преобразуется в оператор KQL distinct.


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

Преобразуется в KQL:| distinct field1, field2

условие подсчета

Возвращает количество соответствующих записей. Преобразуется в оператор KQL count.

{
  "$type": "count"
}

Преобразуется в KQL:| count

Суммирование предложения

Агрегирует данные с помощью операций count или argmax. Преобразуется в оператор KQL summarize.

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

Поддерживаемые операторы:

  • count count() →. Подсчет записей, сгруппированных по указанным полям.
  • argmax arg_max() → — получение записей с максимальным значением в указанном поле.

Пример подсчета:

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

Преобразуется в KQL:| summarize resourceCount = count() by resourceGroup, type

Пример ArgMax:

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

Преобразуется в KQL:| summarize arg_max(createdTime, *) by resourceGroup

Предложение Расширения

Добавляет вычисляемые столбцы в результаты. Преобразуется в оператор KQL extend.

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

Example:

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

Преобразуется в KQL:| extend environmentId = tostring(properties.environmentId)https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/scalarfunctions) для доступных функций.

Предложение Join

Объединяется с другой таблицей или вложенным запросом. Преобразуется в оператор KQL join.


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

Поддерживаемые типы соединения: API поддерживает все виды соединения KQL. Полный список доступных типов соединения и их поведения см. в документации по оператору соединения KQL.

Пример (присоединение ресурсов Power Platform с информацией о среде):

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

Преобразуется в 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

Полные примеры запросов

Пример. Базовый запрос ресурсов Power Platform (шаблон центра администрирования Power Platform по умолчанию)

Получите все ресурсы Power Platform с информацией о среде— это запрос по умолчанию, используемый центром администрирования 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:

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

Пример. Подсчет ресурсов Power Platform по типу и расположению

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

Эквивалент KQL:

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

Пример: запрос для простых Canvas приложений

Получение приложений на основе холста с помощью базовой фильтрации и проекции:

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

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

Пример: фильтрация ресурсов по среде и диапазону дат

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

Преобразуется в 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

Формат ответа

API возвращает объект ResourceQueryResult из пакета SDK Azure Resource Graph. Этот объект содержит результаты запроса и метаданные о выполнении запроса.

Структура ответа:

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