首页 > 解决方案 > Powershell - 在构建用于 MS Graph odata 语句的字符串时遇到问题

问题描述

我意识到这对于这里的某些人来说可能非常简单,而且我遗漏了一些明显的东西,但是我在尝试将字符串构建到 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

对于单个设备和单个设备类别,这可以按预期工作,但我正在尝试构建一个可以使用设备 ID 和设备类别 ID 参数调用的模块。

不起作用的是尝试用我的参数中的字符串替换硬编码的 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"其末尾带有文字而不是该字符串的值。

标签: powershellmicrosoft-graph-api

解决方案


我认为AdminOfThings正确识别了单引号字符串中缺少扩展的问题。

我会用


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

推荐阅读