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

如何解决AccessTokens配合Connect-MicrosoftTeams cmdlet的空引用异常?

解决Connect-MicrosoftTeams空引用异常问题

问题描述

我按照官方文档使用AccessTokens连接Microsoft Teams,应用已在Azure AD注册,分配了所需API权限和Teams管理员角色,令牌能正常生成,但运行代码时出现空引用错误:

Connect-MicrosoftTeams : Object reference not set to an instance of an object.
At line:29 char:1
+ Connect-MicrosoftTeams -AccessTokens @("$graphToken", "$teamsToken")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : AuthenticationError: (:) [Connect-MicrosoftTeams], NullReferenceException
    + FullyQualifiedErrorId : Connect-MicrosoftTeams,Microsoft.TeamsCmdlets.Powershell.Connect.ConnectMicrosoftTeams
 
Connect-MicrosoftTeams : Object reference not set to an instance of an object.
At line:29 char:1
+ Connect-MicrosoftTeams -AccessTokens @("$graphToken", "$teamsToken")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Connect-MicrosoftTeams], NullReferenceException
    + FullyQualifiedErrorId : System.NullReferenceException,Microsoft.TeamsCmdlets.Powershell.Connect.ConnectMicrosoftTeams

使用的代码如下:

$ClientSecret   = 'xxxxx~xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
$ApplicationID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$TenantID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
    
$graphtokenBody = @{   
   Grant_Type    = "client_credentials"   
   Scope         = "https://graph.microsoft.com/.default"   
   Client_Id     = $ApplicationID   
   Client_Secret = $ClientSecret   
}   
    
$graphToken = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantID/oauth2/v2.0/token" -Method POST -Body $graphtokenBody | Select-Object -ExpandProperty Access_Token 
    
$teamstokenBody = @{   
   Grant_Type    = "client_credentials"   
   Scope         = "48ac35b8-9aa8-4d74-927d-1f4a14a0b239/.default"   
   Client_Id     = $ApplicationID   
   Client_Secret = $ClientSecret 
} 
    
$teamsToken = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantID/oauth2/v2.0/token" -Method POST -Body $teamstokenBody | Select-Object -ExpandProperty Access_Token 
    
Connect-MicrosoftTeams -AccessTokens @("$graphToken", "$teamsToken")

可行解决方法

1. 升级Teams PowerShell模块

旧版本模块容易出现这类空引用问题,先升级到最新版:

Update-Module -Name MicrosoftTeams -Force

升级后关闭并重新打开PowerShell会话再尝试连接。

2. 调整令牌传递格式

不要用双引号包裹令牌变量,直接传递原始变量即可:

Connect-MicrosoftTeams -AccessTokens @($graphToken, $teamsToken)

双引号可能会导致令牌字符串被意外解析,引发后续验证时的空引用错误。

3. 验证令牌权限有效性

  • 使用本地JWT解析工具查看$graphToken和$teamsToken的roles声明,确认包含Teams管理相关权限(如TeamSettings.ReadWrite.All、Group.ReadWrite.All等)。
  • 确认Azure AD应用的API权限已完成管理员同意授权,未授权的权限不会被包含在令牌中。

4. 合并令牌请求(优化方案)

可以通过一次请求获取两个资源的令牌,减少请求次数避免潜在会话问题:

$tokenBody = @{   
   Grant_Type    = "client_credentials"   
   Scope         = "https://graph.microsoft.com/.default 48ac35b8-9aa8-4d74-927d-1f4a14a0b239/.default"   
   Client_Id     = $ApplicationID   
   Client_Secret = $ClientSecret   
}   
$tokens = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantID/oauth2/v2.0/token" -Method POST -Body $tokenBody
Connect-MicrosoftTeams -AccessTokens @($tokens.access_token)

此方式返回的令牌同时包含两个资源权限,部分场景下可直接用单个令牌完成连接。

5. 排查运行环境问题

  • 确保PowerShell运行环境没有代理或防火墙拦截令牌验证请求。
  • 尝试以管理员身份打开干净的PowerShell会话执行代码,排除其他模块冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:20:36