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

添加PnP PowerShell后Azure函数调用Graph遇类型加载错误

问题分析:加载Microsoft.Graph.Core类型失败(PnP.PowerShell与Microsoft.Graph冲突)

问题背景

  • 运行环境:PowerShell 7.4 作为运行时的Azure Function
  • 依赖模块:PnP.PowerShell、Microsoft.Graph、ExchangeOnlineManagement(已在requirements文件中指定版本)
  • 异常表现:单独使用Microsoft.Graph时Get-MgUser执行正常,添加PnP.PowerShell模块后,执行该命令抛出错误:

Could not load type 'Microsoft.Graph.Authentication.AzureIdentityAccessTokenProvider' from assembly 'Microsoft.Graph.Core, Version=1.25.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

错误原因

本质是模块依赖的版本冲突:

  • PnP.PowerShell自身会依赖特定版本的Microsoft.Graph.Core(通常是相对老旧的版本),而你当前使用的Microsoft.Graph模块需要的是更高版本的Microsoft.Graph.Core(即报错里的1.25.1.0)。
  • 当两个模块同时加载时,PowerShell会优先加载PnP.PowerShell带来的旧版Microsoft.Graph.Core,导致Microsoft.Graph模块找不到它需要的AzureIdentityAccessTokenProvider类型——这个类型是在较新的Microsoft.Graph.Core版本中才引入的,旧版根本没有这个类型定义。

解决方案

  • 统一兼容的模块版本
    查PnP.PowerShell的官方版本说明,找到它兼容的Microsoft.Graph.Core版本,然后把你的Microsoft.Graph模块降级到对应兼容的版本;或者尝试升级PnP.PowerShell到最新版,部分新版已经更新了对Microsoft.Graph.Core的依赖,可能和你当前的Microsoft.Graph版本匹配。
  • 隔离模块加载
    在脚本里用Import-Module -UseWindowsPowerShell(仅限兼容场景),或者通过Start-Job创建独立的PowerShell会话,分别加载PnP和Microsoft.Graph模块,避免两个模块的依赖在同一个会话里打架。
  • 严格管控requirements文件
    确保requirements里指定的所有模块版本是相互兼容的,比如示例配置:
    PnP.PowerShell=2.20.0
    Microsoft.Graph=1.25.0
    ExchangeOnlineManagement=3.4.0
    
    注意:不同版本的PnP.PowerShell对应不同的Microsoft.Graph兼容版本,必须提前验证好。
  • 清理本地缓存
    本地调试时,删除.azurefunctions\workers\powershell\7.4路径下的模块缓存,重新安装指定版本的模块,确保没有遗留的旧版依赖文件干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:57:41