You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell修改ConvertFrom-Json生成对象属性提示不存在但实际存在问题咨询

问题根源

1. 数组索引缺失

JSON定义中accessPackageAssignmentPolicies是数组类型(被[]包裹),内部仅包含1个初始策略对象,你在访问其子属性时未加索引[0],直接操作数组对象本身的属性,无法找到对应定义。

补充:allowedRequestors可正常修改是因为PowerShell访问数组属性时会自动展开所有元素的属性,刚好命中了第一个策略对象下已初始化的allowedRequestors空数组,所以追加操作可执行,但其他赋值、嵌套属性操作场景下该自动展开机制不生效。

2. null属性赋值逻辑错误

初始JSON中requestApprovalSettings默认值为null,你使用+=运算符追加对象是错误的:+=仅适用于已存在的数组/集合追加元素,针对null属性应直接用=赋值新对象。

3. 对象属性访问语法错误

Get-Variable仅用于读取独立PowerShell变量,approver$i是$assignmentData对象的属性,不需要用Get-Variable读取,直接用动态属性访问语法即可。

4. 嵌套数组未加索引

approvalStages是你新定义的数组,访问primaryApprovers时未指定要修改数组中哪个元素的属性,直接操作数组整体属性导致报错。


修复后代码(仅修改foreach循环内错误部分)

foreach($assignmentData in $Content) {
    $accesspacakgeRequestObject.catalogId = $assignmentData.catalogId
    $accesspacakgeRequestObject.displayName = $assignmentData.displayName
    $accesspacakgeRequestObject.description = $assignmentData.description
    # 加[0]指定访问第一个策略对象
    $accesspacakgeRequestObject.accessPackageAssignmentPolicies[0].requestorSettings.scopeType = $assignmentData.scope 

    if ($assignmentData.scope -eq "SpecificDirectorySubjects") {
        # 加[0]指定访问第一个策略对象
        $accesspacakgeRequestObject.accessPackageAssignmentPolicies[0].requestorSettings.allowedRequestors += New-Object -TypeName psobject -Property @{'@odata.type' = '#microsoft.graph.groupMembers'; 'id' = $assignmentData.groupId; 'description' = $assignmentData.groupName; 'isBackup' = 'false'}
    }

    $numApprovalStages = [int]$assignmentData.approvalStages

    if ($numApprovalStages -gt 0) {
        # 加[0]指定访问第一个策略对象,将+=改为=直接赋值给null属性
        $accesspacakgeRequestObject.accessPackageAssignmentPolicies[0].requestApprovalSettings = New-Object -TypeName psobject -Property @{'approvalMode' = 'Serial'; 'isApprovalRequired' = 'true'; 'isApprovalRequiredForExtension' = 'false'; 'isRequestorJustificationRequired' = 'false'; 'approvalStages' = @()}

        for ($i=1;$i -le $numApprovalStages; $i++)
        {
            # 加[0]指定访问第一个策略对象
            $accesspacakgeRequestObject.accessPackageAssignmentPolicies[0].requestApprovalSettings.approvalStages += New-Object -TypeName psobject -Property @{'approvalStageTimeOutInDays' = '14'; 'primaryApprovers' = @(); escalationApprovers = @();'isEscalationEnabled' = 'false'; 'escalationTimeInMinutes' = '0'; 'isApproverJustificationRequired' = 'true'}
            # 加[$i-1]指定访问刚添加的审批阶段对象,修改动态属性访问语法
            $accesspacakgeRequestObject.accessPackageAssignmentPolicies[0].requestApprovalSettings.approvalStages[$i-1].primaryApprovers += New-Object -TypeName psobject -Property @{'@odata.type' = '#microsoft.graph.singleUser'; "displayName" = ''; 'objectId' = $assignmentData."approver$i"; 'isBackup' = 'false'}
        }
    }
    
    $requestbody = $accesspacakgeRequestObject | ConvertTo-Json -Depth 10
    $response = Invoke-RestMethod $emlRequestUrl -Headers $headers -Method Post -Body $requestbody -UseBasicParsing -ErrorAction Continue
}

内容的提问来源于stack exchange,提问作者Berty.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 17:36:03