Я не могу разобрать и сделать вызов, используя текущий 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
Немедленное решение вашей проблемы — просто экранировать дословные $
с помощью обратной кавычки `
:
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\getDevices.ps1:33 char:28 + Invoke-MSGraphRequest -Url $URL -HttpMethod Get + ~~~~ + CategoryInfo : InvalidData: (:) [Invoke-MSGraphRequest], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Intune.PowerShellGraphSDK.PowerShellCmdlets.InvokeRequest
это работает с одним параметром запроса, но не с двумя. Так что этот ``` 'graph.microsoft.com/beta/deviceManagement/…' `` возвращает @odata.context
Что-то полезное, что я хотел бы знать, прежде чем спрашивать >> В конечной точке бета-версии префикс $ не является обязательным. Например, вместо $filter можно использовать filter. На конечной точке v1 префикс $ является необязательным только для подмножества API. Для простоты всегда указывайте $, если используете конечную точку v1. docs.microsoft.com/en-us/graph/…
Экранируйте буквальный символ
$
в$select
и$filter
с помощью обратной кавычки:https://host/path?`$select=emailaddress,...