使用graph.microsoft.com时找不到Microsoft.Open.AzureAD.Model.ResourceAccess类型
报错原因
Microsoft.Open.AzureAD.Model.*相关的类都属于AzureAD PowerShell模块的内置类型,你当前环境要么没有安装AzureAD模块,要么PowerShell 7(x86)和AzureAD模块兼容性差导致类型未加载,才会触发找不到类型的报错。
解决方案
方案1:安装兼容的AzureAD模块(适配原有代码)
32位PowerShell 7要正常加载AzureAD模块的相关类型,需要安装对应x86版本的AzureAD模块:
- 打开32位PowerShell 7执行安装命令:
Install-Module -Name AzureAD -RequiredVersion 2.0.2.140 -AllowClobber -Force
- 运行脚本前先导入模块触发类型加载:
Import-Module AzureAD -UseWindowsPowerShell
注意:AzureAD模块本身是为Windows PowerShell 5.1开发的,PowerShell 7中导入需要加
-UseWindowsPowerShell参数走兼容层,稳定性有限,更推荐你直接改用Graph原生的对象构造方式。
方案2:放弃AzureAD模块类型,用原生PowerShell对象构造(适配Graph迁移需求)
你既然已经在迁移到Graph API,完全不需要依赖AzureAD模块的内置类型,直接用自定义PSObject构造对应结构即可,原有构造代码可以直接替换为:
# 替换原ResourceAccess构造段 $ResourceAccessObjects = @() foreach ($RoleAssignment in $RoleAssignments) { $resourceAccess = [PSCustomObject]@{ Id = $RoleAssignment.Id Type = 'Role' } $ResourceAccessObjects += $resourceAccess } $requiredResourceAccess = [PSCustomObject]@{ ResourceAppId = $targetSp.AppId ResourceAccess = $ResourceAccessObjects }
这种方式完全不依赖AzureAD模块的任何类型,后续你替换Set-AzureADApplication为Graph调用时,直接把这个对象转成JSON提交即可,无需额外调整结构。
额外注意
你当前的脚本存在语法错误:GrantAllThePermissionsWeWant函数定义完参数后多写了一个闭合大括号},会导致后续代码不在函数作用域内,运行时会出现变量找不到的问题,需要先删除这个多余的大括号。
内容的提问来源于stack exchange,提问作者Nadia Hansen
相关产品推荐
相关产品推荐

