修正获取Microsoft 365用户MFA状态的PowerShell脚本问题
修正后的Microsoft 365用户MFA状态报表脚本
原脚本的问题在于错误地将仅配置了MFA验证方法但未启用MFA要求的用户标记为Enabled状态。实际上,StrongAuthenticationRequirements属性才是控制MFA是否启用/强制的核心依据,而StrongAuthenticationMethods仅代表用户添加了验证方法,不代表MFA已被启用。
以下是修正后的脚本,可准确返回Disabled、Enabled、Enforced三种状态:
Get-MsolUser -All | Select-Object DisplayName, UserPrincipalName, @{ Name = 'MFA Status'; Expression = { # 优先判断MFA要求的状态 if ($_.StrongAuthenticationRequirements.Count -gt 0) { $state = $_.StrongAuthenticationRequirements[0].State if ($state -eq "Enforced") { "Enforced" } elseif ($state -eq "Enabled") { "Enabled" } else { "Disabled" } } else { # 无MFA要求配置,无论是否有验证方法,均为Disabled "Disabled" } } } | Export-Csv "D:\MFAStatus.csv" -NoTypeInformation
状态判断逻辑说明:
- Enforced:用户已配置MFA强制要求,必须使用MFA进行登录
- Enabled:用户已启用MFA要求,但尚未完成首次MFA验证(或处于启用但未强制的状态)
- Disabled:用户未配置任何MFA启用/强制要求,即使添加了验证方法,MFA仍处于禁用状态
内容的提问来源于stack exchange,提问作者Zou
相关产品推荐
相关产品推荐

