Не удается проанализировать строку URL-адреса для графика Microsoft, поскольку используется команда Invoke-MSGraphRequest и параметры запроса

Я не могу разобрать и сделать вызов, используя текущий URL-адрес, потому что, когда я использую параметры запроса $filter и $select, он разбивает строку, но отлично работает в Postman и дает мне все необходимые данные.

Connect-MSGraph
Invoke-MSGraphRequest -Url "https://graph.microsoft.com/beta/deviceManagement/managedDevices?$select=emailaddress,id,imei,operatingSystem,ownerType,managedDeviceOwnerType&$filter=(operatingSystem eq 'iOS')" -HttpMethod GET

Мне нужно отфильтровать эти устройства, тогда, если право собственности является личным, я собирался снова использовать API графа, чтобы обновить объектное устройство с помощью PATCH. Пожалуйста, помогите с этим

https://docs.microsoft.com/en-us/graph/query-parameters#фильтр-параметрhttps://docs.microsoft.com/en-us/graph/api/intune-devices-manageddevice-get?view=graph-rest-1.0

Экранируйте буквальный символ $ в $select и $filter с помощью обратной кавычки: https://host/path?`$select=emailaddress,...

Mathias R. Jessen 16.03.2022 18:07
В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
0
1
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Немедленное решение вашей проблемы — просто экранировать дословные $ с помощью обратной кавычки `:

Invoke-MSGraphRequest -Url "https://graph.microsoft.com/beta/deviceManagement/managedDevices?`$select=emailaddress,id,imei,operatingSystem,ownerType,managedDeviceOwnerType&`$filter=(operatingSystem eq 'iOS')" -HttpMethod GET

Или использовать одинарные кавычки ', чтобы PowerShell не пытался расширить переменные типа выглядит — буквальные одинарные кавычки внутри URL должны быть экранированы с помощью удвоение:

Invoke-MSGraphRequest -Url 'https://graph.microsoft.com/beta/deviceManagement/managedDevices?$select=emailaddress,id,imei,operatingSystem,ownerType,managedDeviceOwnerType&$filter=(operatingSystem eq ''iOS'')' -HttpMethod GET

При этом я бы лично рекомендовал создавать параметры запроса из более простых частей:

$endpointURL = 'https://graph.microsoft.com/beta/deviceManagement/managedDevices'

# assign variable parts of the filter to a variable
$targetOperatingSystem = 'iOS'

# construct a hashtable containing all the query parameters
$GraphParameters = [ordered]@{
  '$select' = 'emailaddress,id,imei,operatingSystem,ownerType,managedDeviceOwnerType'
  '$filter' = "(operatingSystem eq '$targetOperatingSystem')"
}

# construct query string and final URL from the individual parts above
$queryString = $GraphParameters.GetEnumerator().ForEach({ $_.Key,$_.Value -join '=' }) -join '&'
$URL = $endpointURL,$queryString -join '?'

И затем, наконец, вызвать Invoke-MSGraphRequest -Url $URL -HttpMethod Get

Теперь я получаю сообщение об ошибке Invoke-MSGraphRequest : Cannot validate argument on parameter 'Url'. The provided URL is not valid - the URL may be a relative URL At C:\Users\Admin.MH\Desktop\powershell\graph\deviceOwnership\g‌​etDevices.ps1:33 char:28 + Invoke-MSGraphRequest -Url $URL -HttpMethod Get + ~~~~ + CategoryInfo : InvalidData: (:) [Invoke-MSGraphRequest], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Intune.PowerShell‌​GraphSDK.PowerShellC‌​mdlets.InvokeRequest

Daikyu 16.03.2022 19:01

это работает с одним параметром запроса, но не с двумя. Так что этот ``` 'graph.microsoft.com/beta/deviceManagement/…' `` возвращает @odata.context

Daikyu 16.03.2022 19:06

Что-то полезное, что я хотел бы знать, прежде чем спрашивать >> В конечной точке бета-версии префикс $ не является обязательным. Например, вместо $filter можно использовать filter. На конечной точке v1 префикс $ является необязательным только для подмножества API. Для простоты всегда указывайте $, если используете конечную точку v1. docs.microsoft.com/en-us/graph/…

Daikyu 16.03.2022 20:54

Другие вопросы по теме