Powershell, Graph API и $ select - PullRequest
0 голосов
/ 27 мая 2020

У меня MS Graph API в PowerShell работает по большей части.

Я использую

$Uri = $null
$Uri = "https://graph.microsoft.com/v1.0/users?$select=displayName,givenName,postalCode"
$payload=$null
$payload = Invoke-RestMethod -uri $Uri  -Headers $Header -Method Get -ContentType "application/json"
$payload.value

, однако это не меняет выбор полей. Он продолжает возвращать поля по умолчанию, как показано здесь

https://docs.microsoft.com/en-us/graph/api/user-list?view=graph-rest-1.0&tabs=http

Что я мог делать неправильно?

Я использую аутентификацию на основе приложений . Полезные данные возвращаются, но оператор $ select не распознается.

PowerShell не возвращает ошибок

Я запускаю его в Graph Explorer, он работает нормально.

1 Ответ

0 голосов
/ 28 мая 2020

Ошибка вызвана типом объявления строки, используемой для строки Uri. Вы объявляете строку следующим образом:

$Uri = "https://graph.microsoft.com/v1.0/users?$select=displayName,givenName,postalCode"

Это сообщает Powershell, что вы хотите оценить строку. $ - идентификатор переменной Powershell. Необъявленные переменные автоматически устанавливаются в пустую строку при вычислении в строке. Следовательно, запрос, выполняемый для Graph Api:

https://graph.microsoft.com/v1.0/users?=displayName,givenName,postalCode

Вы можете проверить это самостоятельно, записав переменную на хост:

Write-Host $Uri

Если вы выполните этот запрос с помощью Graph Explorer . Он вернет всех пользователей без примененного фильтра, что вы наблюдали. Вам нужно изменить объявление на:

$Uri = 'https://graph.microsoft.com/v1.0/users?$select=displayName,givenName,postalCode'

Тогда Powershell не будет интерпретировать $ select как переменную, и ваш запрос должен работать правильно.

...