无法找到Microsoft.Open.AzureAD.Model.ClaimsMappingPolicy类型问题求助
解决AzureAD声明映射Policy创建时的TypeNotFound错误
问题场景
尝试为租户内的应用注册添加额外声明映射,执行以下PowerShell代码时:
$app = Get-AzureADApplication -ObjectId <obj-id> $policy = New-Object Microsoft.Open.AzureAD.Model.ClaimsMappingPolicy $policy.InputClaims = @( (New-Object Microsoft.Open.AzureAD.Model.InputClaim).Type("email") ) $policy.OutputClaims = @( (New-Object Microsoft.Open.AzureAD.Model.OutputClaim).Type("t24user") ) $policy.ClaimMappings = @( (New-Object Microsoft.Open.AzureAD.Model.ClaimMapping).InputClaimType("email").OutputClaimType("t24user").TransformationMethod("ExtractPrefixFromEmail") )
执行$policy = New-Object Microsoft.Open.AzureAD.Model.ClaimsMappingPolicy时触发错误:
At line:1 char:11 + $policy = New-Object -TypeName Microsoft.Open.AzureAD.Model.ClaimsMap ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidType: (:) [New-Object], PSArgumentException + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand
已尝试重新安装AzureAD、AzureADPreview模块,问题未解决。
解决方案
方法1:使用官方推荐的New-AzureADPolicy命令创建策略
手动实例化ClaimsMappingPolicy对象容易出现类型找不到的问题,推荐直接通过JSON定义创建策略,步骤如下:
- 确保已连接到AzureAD:
Connect-AzureAD
- 定义策略的JSON配置:
$policyDefinition = @" { "ClaimsMappingPolicy": { "Version": 1, "IncludeBasicClaimSet": true, "InputClaims": [ { "ClaimTypeReferenceId": "email" } ], "OutputClaims": [ { "ClaimTypeReferenceId": "t24user", "TransformationId": "ExtractPrefixFromEmail" } ] } } "@
- 创建策略并关联到目标应用:
# 创建声明映射策略 $policy = New-AzureADPolicy -Definition $policyDefinition -DisplayName "ExtractEmailPrefixToT24User" -Type "ClaimsMappingPolicy" # 将策略绑定到应用注册 Add-AzureADApplicationPolicy -Id <obj-id> -RefObjectId $policy.Id
方法2:修复模块并尝试对象实例化(不推荐)
如果坚持使用对象实例化方式,需确保模块正确加载:
- 卸载所有AzureAD相关模块:
Uninstall-Module AzureAD -Force -ErrorAction SilentlyContinue Uninstall-Module AzureADPreview -Force -ErrorAction SilentlyContinue
- 安装最新版AzureADPreview模块:
Install-Module AzureADPreview -AllowClobber -Force -Scope CurrentUser
- 强制导入模块:
Import-Module AzureADPreview -Force
- 重新执行实例化代码(修正原代码中链式调用的问题,改为属性赋值):
$policy = New-Object Microsoft.Open.AzureAD.Model.ClaimsMappingPolicy $policy.Version = 1 $policy.IncludeBasicClaimSet = $true $inputClaim = New-Object Microsoft.Open.AzureAD.Model.InputClaim $inputClaim.ClaimTypeReferenceId = "email" $policy.InputClaims = @($inputClaim) $outputClaim = New-Object Microsoft.Open.AzureAD.Model.OutputClaim $outputClaim.ClaimTypeReferenceId = "t24user" $outputClaim.TransformationId = "ExtractPrefixFromEmail" $policy.OutputClaims = @($outputClaim) # 创建策略并关联应用 $createdPolicy = New-AzureADPolicy -Definition ($policy | ConvertTo-Json) -DisplayName "EmailToT24UserPolicy" -Type "ClaimsMappingPolicy" Add-AzureADApplicationPolicy -Id <obj-id> -RefObjectId $createdPolicy.Id
注意事项
- 操作需具备Application Administrator或Cloud Application Administrator权限
ExtractPrefixFromEmail为AzureAD内置转换方法,默认可直接使用
内容的提问来源于stack exchange,提问作者ManishBharathi
相关产品推荐
相关产品推荐

