服务器本身不直接提供mfa开启状态导出功能,需依托管服务(如azure ad、ad fs、okta等)通过其api、管理界面或报表导出,因mfa状态属身份服务层策略而非操作系统原生属性。

服务器本身不直接提供“多因素认证开启状态”的统一导出功能,因为是否启用MFA取决于所用的身份认证系统(如Azure AD、AD FS、JumpCloud、Okta、或自研平台),而非Windows Server或Linux服务器原生管理。导出前必须明确:你的MFA由哪个服务托管?下面分常见场景说明操作路径和导出方法。
若使用 Azure Active Directory(主流云环境)
Azure AD 是目前企业最常部署的MFA载体。其MFA状态实际体现为“用户是否已注册安全信息”及“是否强制执行”。导出需借助 Microsoft Graph API 或 PowerShell 模块:
- 安装最新 Microsoft.Graph.Authentication 和 Microsoft.Graph.Users 模块:
Install-Module Microsoft.Graph.Users -Scope CurrentUser - 连接并导出关键字段(含 MFA 注册状态):
Connect-MgGraph -Scopes "User.Read.All"<br>Get-MgUser -All | Select-Object UserPrincipalName, DisplayName, @{Name="MFARegistered";Expression={$_.StrongAuthenticationMethods.Count -gt 0}}, @{Name="MFAPolicy";Expression={$_.StrongAuthenticationRequirements.State}} | Export-Csv "mfa_status.csv" -NoTypeInformation -Encoding UTF8 - 说明:字段
StrongAuthenticationMethods.Count> 0 表示用户已注册至少一种验证方式(如微软验证器、短信、电话);StrongAuthenticationRequirements.State显示策略是 Enabled/Disabled(仅对条件访问策略生效)
若使用 Windows Server AD + Azure MFA Server(本地混合)
传统 Azure MFA Server 已停更,但存量部署仍存在。其状态存储在 AD 扩展属性中(如 msExchUMDtmfMap 或自定义属性),无法通过标准AD命令直接读取。推荐做法是:
- 确认MFA Server是否启用了“将注册状态写入AD”选项(默认关闭)
- 若已启用,用
Get-ADUser -Filter * -Properties msDS-ExternalDirectoryObjectId, extensionAttribute15等扩展属性判断(具体字段需查MFA Server配置文档) - 更可靠的方式是登录 MFA Server 管理控制台 → 报告 → “用户注册状态”,导出为CSV(界面支持)
若使用第三方MFA平台(如 Duo、Okta、Google Authenticator 集成)
这类平台均提供管理员API或后台报表导出功能,不依赖服务器命令:
- Duo Security:登录 Admin Panel → Users → 导出按钮(支持 CSV,含 “Status” 列,值为 “Active”/“Pending”/“Disabled”)
- Okta:Admin Console → Directory → People → 点击右上角 ⋯ → Export to CSV(导出字段含 “MFA Methods”、“MFA Enrolled”)
-
自研或LDAP集成方案:需检查MFA状态是否存于LDAP特定属性(如
pwdPolicySubentry、authMethod)或独立数据库表,再用 ldapsearch 或 SQL 查询导出
不建议依赖服务器本地命令的原因
像 net user、Get-LocalUser 或 Get-ADUser(无额外模块)均无法返回MFA状态——它不是操作系统级属性,而是身份服务层的策略与注册结果。强行扫描登录日志或审计事件(如4624事件中带“Kerberos pre-authentication failed”)只能间接推断,无法准确反映“是否开启”,且遗漏已注册未触发验证的用户。
所以,先定位MFA服务归属,再选对应管理界面或API导出,才是准确、合规、可审计的做法。










