Purview保留标签添加审核者脚本问题:dispositionReviewStages修改无效
解决Purview保留标签处置审核阶段添加审核者无生效问题
核心问题排查与修正步骤
1. 移除Format-List导致的对象类型错误
你当前用Get-MgSecurityLabelRetentionLabel | Format-List获取标签详情,Format-List会将原始的Graph对象转换为格式化输出对象,导致后续无法正确访问DispositionReviewStages等嵌套属性。
修改代码:
# 移除Format-List,保留原始Graph对象 $labelDetails = Get-MgSecurityLabelRetentionLabel -RetentionLabelId $labelId
2. 切换GCC租户专用Graph端点
GCC环境的Graph API端点与公共云不同,你当前使用的graph.microsoft.com是公共云端点,请求会发送到错误环境,导致修改不生效。
修正端点与连接命令:
# 连接GCC环境的Graph Connect-MgGraph -Environment USGov -Scopes "RecordsManagement.ReadWrite.All" # 使用GCC专用端点 $uri = "https://graph.microsoft.us/v1.0/security/labels/retentionLabels/$labelId"
3. 简化dispositionReviewStages的PATCH方式
无需使用@delta语法,直接传递完整的更新后阶段数组更可靠,Graph API会自动覆盖原有集合内容。避免引入additionalProperties这类冗余字段,防止API忽略请求。
修改更新逻辑:
# 处理第一个审核阶段(如果有多个阶段可循环处理) $targetStage = $labelDetails.DispositionReviewStages[0] # 合并现有审核者与新审核者 $updatedReviewers = @($targetStage.ReviewersEmailAddresses) + $userEmail # 构建更新后的阶段数组 $updatedStages = @( @{ id = $targetStage.Id name = $targetStage.Name stageNumber = $targetStage.StageNumber reviewersEmailAddresses = $updatedReviewers } ) # 构建PATCH请求体 $patchChanges = @{ dispositionReviewStages = $updatedStages } $jsonConversion = $patchChanges | ConvertTo-Json -Depth 5
4. 验证JSON输出正确性
在发送请求前,先输出$jsonConversion确认结构符合要求,确保没有多余字段或格式错误。例如正确的JSON结构应该类似:
{ "dispositionReviewStages": [ { "id": "xxx", "name": "审核阶段1", "stageNumber": 1, "reviewersEmailAddresses": ["原审核者邮箱", "new@tenant.gov"] } ] }
完整修正后的脚本示例
try { Import-Module Microsoft.Graph.Security # 连接GCC环境Graph Connect-MgGraph -Environment USGov -Scopes "RecordsManagement.ReadWrite.All" } catch { Write-Host "连接Security模块失败" } # 测试用标签ID $labelId = "ea2d5f8f-6503-4d4c-87db-e60cbe640a17" # 获取原始标签详情(无Format-List) $labelDetails = Get-MgSecurityLabelRetentionLabel -RetentionLabelId $labelId # 目标审核阶段 $targetStage = $labelDetails.DispositionReviewStages[0] # 新审核者邮箱 $userEmail = "userName@ourTenant.gov" # 合并审核者列表 $updatedReviewers = @($targetStage.ReviewersEmailAddresses) + $userEmail # 构建更新后的阶段数组 $updatedStages = @( @{ id = $targetStage.Id name = $targetStage.Name stageNumber = $targetStage.StageNumber reviewersEmailAddresses = $updatedReviewers } ) # 构建PATCH请求体 $patchChanges = @{ dispositionReviewStages = $updatedStages } $jsonConversion = $patchChanges | ConvertTo-Json -Depth 5 # GCC专用端点 $uri = "https://graph.microsoft.us/v1.0/security/labels/retentionLabels/$labelId" # 发送PATCH请求 Invoke-MgGraphRequest -Method PATCH -Uri $uri -Body $jsonConversion -ContentType "application/json" # 验证修改结果 $validation = Invoke-MgGraphRequest -Method GET -Uri $uri $validation.dispositionReviewStages
内容的提问来源于stack exchange,提问作者vross879
相关产品推荐
相关产品推荐

