使用 Graph API 和 Intune。我在脚本中创建哈希表并将其转换为 JSON,然后通过 POST 请求发送到 GraphAPI。
但是,在某些情况下,转换过程中会丢失数组。因此,GraphAPI 不接受 JSON 并返回错误。
当转换正确时的情况:
$TargetGroupIDs = @('111', '222')
$AppAssignment = @{
mobileAppAssignments = @{
}
}
$AppAssignment.mobileAppAssignments = foreach ($GroupID in $TargetGroupIDs) {
$Hash = [ordered]@{
"@odata.type" = "#microsoft.graph.mobileAppAssignment"
intent = "Required"
settings = $null
target = @{
"@odata.type" = "#microsoft.graph.groupAssignmentTarget"
groupId = "$GroupID"
}
}
write-output (New-Object -Typename PSObject -Property $hash)
}
$AppAssignment | ConvertTo-Json -Depth 50
输出:
{
"mobileAppAssignments": [
{
"@odata.type": "#microsoft.graph.mobileAppAssignment",
"intent": "Required",
"settings": null,
"target": {
"groupId": "111",
"@odata.type": "#microsoft.graph.groupAssignmentTarget"
}
},
{
"@odata.type": "#microsoft.graph.mobileAppAssignment",
"intent": "Required",
"settings": null,
"target": {
"groupId": "222",
"@odata.type": "#microsoft.graph.groupAssignmentTarget"
}
}
]
}
但是当$TargetGroupIDs中只有一个元素时,转换不正确:
$TargetGroupIDs = @('111')
$AppAssignment = @{
mobileAppAssignments = @{
}
}
$AppAssignment.mobileAppAssignments = foreach ($GroupID in $TargetGroupIDs) {
$Hash = [ordered]@{
"@odata.type" = "#microsoft.graph.mobileAppAssignment"
intent = "Required"
settings = $null
target = @{
"@odata.type" = "#microsoft.graph.groupAssignmentTarget"
groupId = "$GroupID"
}
}
write-output (New-Object -Typename PSObject -Property $hash)
}
$AppAssignment | ConvertTo-Json -Depth 50
输出:
{
"mobileAppAssignments": {
"@odata.type": "#microsoft.graph.mobileAppAssignment",
"intent": "Required",
"settings": null,
"target": {
"groupId": "111",
"@odata.type": "#microsoft.graph.groupAssignmentTarget"
}
}
}
请注意mobileAppAssignments后面括号的不同。第一种情况是[], 而第二种情况是{}。
有人能告诉我第二种情况缺少了什么吗?
foreach
循环用数组子表达式运算符括起来:$AppAssignment.mobileAppAssignments = @(foreach ($GroupID in $TargetGroupIDs) { ... })
- Theo.ForEach
内置方法替换foreach
,该方法始终输出类似数组的集合:$AppAssignment.mobileAppAssignments = $TargetGroupIDs.ForEach{
,并将$GroupID
替换为$_
。 - zett42