使用SharePoint迁移工具PowerShell cmdlets时遇身份验证错误
SPMT PowerShell身份验证失败(GUI正常)解决方案
问题核心原因
SPMT GUI与PowerShell cmdlets的认证机制存在本质差异:
- GUI默认采用现代交互式认证,支持MFA、设备验证等租户安全策略要求的验证流程,适配当前M365的安全规范
- 脚本中硬编码用户名密码的方式依赖传统密码认证协议,若租户启用了安全默认值、禁用Legacy Authentication或强制MFA,该方式会被AAD拦截,进而出现日志中的
user_realm_discovery_failed和400错误
注:所有M365租户均默认基于Azure AD,不存在“未部署AAD”的情况,日志中的AAD错误是认证协议不兼容导致的误解。
解决方案
方案1:改用交互式认证(推荐,与GUI流程一致)
直接使用-Interactive参数触发登录窗口,复用GUI的认证逻辑,绕过纯密码的限制:
Import-Module Microsoft.SharePoint.MigrationTool.PowerShell $SPOUrl = "https://tenant.sharepoint.com/sites/FileShareSite" # 弹出交互式登录窗口,使用和GUI相同的认证方式 Register-SPMTMigration -Interactive -Force -MigrateWithoutRootFolder -PreserveUserPermissionsForFileShare $true -WorkingFolder "X:\log" Add-SPMTTask -FileShareSource "\\file-server\shares\ShareOne" -TargetSiteUrl $SPOUrl -TargetList "ShareOne" -TargetListRelativePath "/" Start-SPMTMigration -NoShow
方案2:非交互式自动化场景(服务主体认证)
若必须无交互执行,需创建Azure AD服务主体替代用户密码认证:
- 在Azure AD中注册应用,授予
SharePoint Online > Sites.FullControl.All应用权限(需全局管理员同意) - 生成客户端密钥,记录租户ID、客户端ID和密钥
- 使用服务主体认证脚本:
Import-Module Microsoft.SharePoint.MigrationTool.PowerShell $SPOUrl = "https://tenant.sharepoint.com/sites/FileShareSite" $tenantId = "你的租户ID" $clientId = "应用注册的客户端ID" $clientSecret = ConvertTo-SecureString "你的客户端密钥" -AsPlainText -Force $appCredential = New-Object System.Management.Automation.PSCredential($clientId, $clientSecret) Register-SPMTMigration -SPOTenantId $tenantId -SPOAppCredential $appCredential -Force -MigrateWithoutRootFolder -PreserveUserPermissionsForFileShare $true -WorkingFolder "X:\log" Add-SPMTTask -FileShareSource "\\file-server\shares\ShareOne" -TargetSiteUrl $SPOUrl -TargetList "ShareOne" -TargetListRelativePath "/" Start-SPMTMigration -NoShow
辅助检查项
- 确保SPMT为最新版本:下载官方最新版SPMT重新安装,旧版本可能存在认证协议兼容问题
- 验证网络连通性:确认运行脚本的机器可正常访问
login.microsoftonline.com等AAD端点,无防火墙/代理拦截 - 检查租户安全设置:确认是否启用安全默认值或Legacy Authentication拦截,这类设置会直接阻止纯密码的传统认证方式
内容的提问来源于stack exchange,提问作者abakedapplepie
相关产品推荐
相关产品推荐

