powershell - 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"
其末尾带有文字而不是该字符串的值。
解决方案
我认为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
推荐阅读
- c++ - 以包装器指针作为函数参数的函数包装器的 CTAD 递归问题
- google-analytics - 我需要在最新的谷歌分析网络+应用中使用谷歌标签管理器吗?
- c++ - 尽管定义了复制和移动构造函数,但 emplace_back 和 push_back 给出“双重释放或损坏(fasttop)”错误
- python - 熊猫数据框的日期存储为 datetime64[ns] 但将唯一值放入列表中会给出一个神秘的长整数
- devise - Rails 设计如何为特定页面/操作自定义错误消息?
- python - 我的 __init__ 中的 for 循环没有按预期工作
- node.js - 在单独的文件中续集关联
- python - 是否可以从模块中导入变量以与 Selenium 一起使用?
- python-2.7 - 如何拆分代码以便在两台计算机上运行
- apache-flink - Apache Flink Tumbling Window 延迟结果