如何通过PowerShell配置Azure AD应用PreAuthorizedApplication并解决报错
我刚帮你定位到了问题的核心:你在给PreAuthorizedApplication的Permissions属性赋值时,传递的是单个PreAuthorizedApplicationPermission对象,但这个属性要求的是数组类型的集合。Azure AD的Graph API在解析请求时,因为类型不匹配,就抛出了那个"缺少类型名称"的错误。
另外还有一个小细节需要修正:DirectAccessGrant是布尔类型,你当前赋值的是字符串"True",应该改成PowerShell原生的布尔值$true,避免类型转换问题。
修正后的完整代码:
# 创建PreAuthorizedApplicationPermission对象并配置属性 $preAuthorizedApplicationPermissons = New-Object -TypeName "Microsoft.Open.AzureAD.Model.PreAuthorizedApplicationPermission" $preAuthorizedApplicationPermissons.AccessGrants = @($oauth2Permission.Id) $preAuthorizedApplicationPermissons.DirectAccessGrant = $true # 创建PreAuthorizedApplication对象,注意Permissions要传数组 $preAuthorizedApplication = New-Object -TypeName "Microsoft.Open.AzureAD.Model.PreAuthorizedApplication" $preAuthorizedApplication.AppId = $myApiAppRegistrationResultAppId # 关键修正:用@()把单个权限对象包装成数组 $preAuthorizedApplication.Permissions = @($preAuthorizedApplicationPermissons) # 更新Azure AD应用 Set-AzureADApplication -ObjectId $appRegistration.ObjectId -PreAuthorizedApplications @($preAuthorizedApplication)
错误原因详解:
你看到的Request_BadRequest错误,本质是API期望接收一个PreAuthorizedApplicationPermission的集合(数组),但你传递了单个对象。当模型明确要求集合类型时,每个 payload 里的值必须有可被推断的类型,单个对象无法被识别为集合,所以触发了类型校验失败。
另外把字符串"True"改成$true是因为PowerShell的字符串和布尔类型在序列化时会有差异,API可能无法正确解析字符串形式的布尔值,用原生布尔值能避免这类隐性问题。
内容的提问来源于stack exchange,提问作者Developist
相关产品推荐
相关产品推荐

