Powershell - возникли проблемы при построении строки для использования в операторе данных MS Graph - PullRequest
0 голосов
/ 08 мая 2019

Я понимаю, что для некоторых людей это, наверное, досадно просто, и мне не хватает чего-то очевидного, но у меня возникают проблемы при попытке встроить строку в запрос PowerShell MS Graph API (предположим, весь код для токена авторизации и т. Д.) работает).

Этот образец работает:

$intuneDeviceId = 'deadbeef-1234-1234-1234-deadbeef1234' 
$deviceCategoryReqBody = '{"@odata.id":"https://graph.microsoft.com/beta/deviceManagement/deviceCategories/98769876-9876-9876-9876-9876543210"}' 
$patchDeviceReqBody = '{}'
#calling the PUT method to update device category for that specific device
Invoke-RestMethod -Uri "https://graph.microsoft.com/beta/deviceManagement/managedDevices/$intuneDeviceId/deviceCategory/`$ref" -Headers $authToken -Method Put -Body $deviceCategoryReqBody
Invoke-RestMethod -Uri "https://graph.microsoft.com/beta/deviceManagement/managedDevices/$intuneDeviceId" -Headers $authToken -Method Patch -Body $patchDeviceReqBody

Это работает, как и ожидалось, для одного устройства и одной категории устройств, но я пытаюсь создать модуль, который можно вызывать с параметрами для идентификатора устройства и идентификатора категории устройства.

Что не работает, так это попытка заменить жестко закодированные GUID строками из моих параметров; Я просто не могу построить рабочую строку в операторе odata:

param([string] $intuneDeviceId,
    [string] $DeviceCategoryID,
    [string] $User)
{ ... } # cutting out all the un-needed auth code stuff to keep this short
$devicereqput = "https://graph.microsoft.com/beta/deviceManagement/deviceCategories/$($DeviceCategoryID)"
$deviceCategoryReqBody = '{"@odata.id":"https://graph.microsoft.com/beta/deviceManagement/deviceCategories/$($DeviceCategoryID)"}' #update the deviceCateg id
$patchDeviceReqBody = '{}'
Invoke-RestMethod -Uri "https://graph.microsoft.com/beta/deviceManagement/managedDevices/$intuneDeviceId/deviceCategory/`$ref" -Headers $authToken -Method Put -Body $deviceCategoryReqBody
Invoke-RestMethod -Uri "https://graph.microsoft.com/beta/deviceManagement/managedDevices/$intuneDeviceId" -Headers $authToken -Method Patch -Body $patchDeviceReqBody

Это терпит неудачу, и проверка строк в этот момент показывает, что строка $devicecategoryreqbody, которую я использую в операторе OData, показывает URL с литералом "$devicecategoryID" в конце вместо значения этой строки.

1 Ответ

2 голосов
/ 08 мая 2019

Я думаю, AdminOfThings правильно определил проблему с отсутствующим расширением в одиночной строке в кавычках.

Я бы использовал

  • оператор формата -f для вставки переменных,
    Чтобы избежать буквенной фигурной скобки в строке -f, удвойте ее ( подсказка EBGreen )

  • splatting для передачи параметров


param([string] $intuneDeviceId,
      [string] $DeviceCategoryID,
      [string] $User)
{...}
$MSgraph               = 'https://graph.microsoft.com/beta/deviceManagement'
$devicereqput          = '"{0}/deviceCategories/{1}"' -f $MSgraph,$DeviceCategoryID

$deviceCategoryReqBody = '{{"@odata.id":{0}}}' -f $devicereqput      #update the deviceCateg id
$patchDeviceReqBody    = '{}'

$params = @{
    Uri     = "{0}/managedDevices/{1}/deviceCategory/`$ref" -f $MSgraph,$intuneDeviceId
    Headers = $authToken
    Method  = Put
    Body    = $deviceCategoryReqBody
}
Invoke-RestMethod @params

$params = @{
    Uri     = "{0}/managedDevices/{1}" -f $MSgraph,$intuneDeviceId
    Headers = $authToken
    Method  = Patch 
    Body    = $patchDeviceReqBody
}
Invoke-RestMethod @params
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...