Проблема с возвратом только подмножества компьютеров из Microsoft Defender ATP через вызов API с использованием фильтра

Я пытаюсь получить подмножество компьютеров из Microsoft Defender ATP через вызовы API, используя запросы OData $filter, следуя инструкциям Microsoft (https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/exposed-apis-odata-samples), но независимо от того, что я делаю, я получаю один и тот же полный набор машин с ограничением в 10 000.

Итак, по какой-то причине мои следующие коды не работают должным образом. Что я делаю не так? Кроме того, как мне получить более 10 000 машин?

Я удалил переменные tenantId, appId и appSecret из приведенного ниже кода.

ОБНОВЛЕНИЕ: я заметил, что когда я проверяю значение переменной $machinesUrl2 в PowerShell ISE после запуска скрипта, в URI отсутствует $filter. Ниже приведен вывод переменной $machinesUrl2:

https://api.securitycenter.windows.com/api/machines?=healthStatus+eq+'Inactive'

Что вызывает падение $filter? это нормальное поведение?

Спасибо,

$resourceAppIdUri = 'https://securitycenter.onmicrosoft.com/windowsatpservice'
$oAuthUri = "https://login.windows.net/$TenantId/oauth2/token"
$authBody = [Ordered] @{
    resource = "$resourceAppIdUri"
    client_id = "$appId"
    client_secret = "$appSecret"
    grant_type = 'client_credentials'
}
$authResponse = Invoke-RestMethod -Method Post -Uri $oAuthUri -Body $authBody -ErrorAction Stop
$aadToken = $authResponse.access_token

$machinesUrl2 =  "https://api.securitycenter.windows.com/api/machines?$filter=healthStatus+eq+'Inactive'"

$headers = @{ 
    'Content-Type' = 'application/json'
    Accept = 'application/json'
    Authorization = "Bearer $aadToken"
}

$machinesResponse = Invoke-WebRequest -Method Get -Uri $machinesUrl2 -Headers $headers -ErrorAction Stop
$machines =  ($machinesResponse | ConvertFrom-Json).value


person Planet-9    schedule 17.09.2020    source источник


Ответы (1)


Я нашел ответ, пытаясь выяснить, почему $filter выпадает из строки запроса.

Необходимо было добавить символ обратной галочки (`) перед $filter.

https://api.securitycenter.windows.com/api/machines?`$filter=healthStatus+eq+'Inactive'

После добавления этого символа в строку запроса код из этой документации Microsoft начал работать.

person Planet-9    schedule 24.09.2020