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

PowerShell运行Azure委托权限应用时无法切换登录账户问题

解决PowerShell中Get-MsalToken无法选择其他账户的问题

我之前也碰到过完全一样的情况!MSAL(Microsoft Authentication Library)默认会优先复用当前PowerShell会话或系统里已缓存的Azure AD账户凭据,所以才会直接跳过账户选择环节,默认用启动PowerShell时的账户登录。下面是几个有效的解决方法:

方法1:添加Prompt参数强制显示账户选择界面

修改你的脚本,在MsalParams里加入Prompt = "select_account"参数,这样就能强制弹出完整的登录窗口,允许你选择已有账户或输入新账户的凭据:

$TenantId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$AppClientId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$MsalParams = @{
    ClientId = $AppClientId
    TenantId = $TenantId
    Scopes = "https://graph.microsoft.com/User.Read"
    Prompt = "select_account"  # 强制显示账户选择界面
}
$MsalResponse = Get-MsalToken @MsalParams
$AccessToken = $MsalResponse.AccessToken

如果需要完全强制重新登录(比如不想看到已有的账户列表,直接从头输入用户名密码),可以把Prompt的值改成"login":

$MsalParams = @{
    ClientId = $AppClientId
    TenantId = $TenantId
    Scopes = "https://graph.microsoft.com/User.Read"
    Prompt = "login"  # 强制重新输入凭据,忽略所有缓存
}

方法2:清除MSAL的本地凭据缓存

如果之前的账户缓存还是干扰登录流程,可以先运行下面的命令清除所有MSAL存储的凭据:

Clear-MsalTokenCache

执行完这个命令后再重新运行你的脚本,就会从头开始引导你登录,不会有任何默认账户的干扰了。

补充说明

如果你的PowerShell之前运行过Connect-AzAccount或其他Azure登录命令,会话中会保留Azure AD上下文,这时候MSAL会自动复用这个上下文。上面的Prompt参数可以直接绕过这个复用逻辑,强制显示登录界面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:54:09