Búsqueda de sitios web

Obtenga el estado MFA con PowerShell (script incluido)


En esta guía, aprenderá cómo obtener el estado MFA de los usuarios de Office 365 con PowerShell.

Le mostraré cómo obtener el estado MFA para un usuario único y una lista de usuarios.

Además, le mostraré cómo exportar el informe de estado de Office 365 MFA a CSV.

Empecemos.

Obtenga el estado MFA con los requisitos de PowerShell

Los ejemplos de esta guía utilizan el módulo Microsoft Graph para comprobar el estado de MFA para los usuarios de Office 365. Necesitará tener instalado el módulo Graph.

El cmdlet Get-MGUser se usa para obtener usuarios únicos y todos de su inquilino de Office 365.

El cmdlet Get-MGUserAuthenticationMethod se usa para obtener los métodos de autenticación MFA para cada usuario.

Importante

Los comandos de PowerShell informan el método de autenticación registrado para cada usuario, así es como se determina el estado de MFA. Desafortunadamente, Microsoft no proporciona un comando que simplemente diga si una cuenta tiene MFA habilitado o no, debe calcularse.

Cuando contraseñaAuthenticationMethod es el único método de autenticación enumerado, significa que el usuario no tiene MFA habilitado. El script que proporciono a continuación verificará los métodos de autenticación y creará un campo de estado de MFA (habilitado o deshabilitado).

Ejemplo 1. Obtener el estado de MFA Office 365 para un solo usuario

Verificar el estado de MFA de un solo usuario es muy fácil, no necesita un script inflado para esto.

Paso 1. Conéctese a Microsoft Graph

Antes de poder obtener usuarios de Office 365 y verificar el estado de MFA, primero debe conectarse a Microsoft Graph.

El siguiente comando le permitirá leer el conjunto completo de propiedades del perfil de usuario de Azure.

Connect-MgGraph -Scopes "User.Read.All"

Nota: Algunos usuarios han mencionado que el script falla y la solicitud de autorización falló. En este caso, intente utilizar Connect-MgGraph -Scopes “UserAuthenticationMethod.Read.All”

Se le pedirá que inicie sesión con su cuenta.

Cuando se haya autenticado, PowerShell debería mostrar "¡Bienvenido a Microsoft Graph!".

Paso 2. Ejecute el cmdlet Get-MGUserAuthenticationMethod

Ejecute el siguiente comando para obtener el estado de MFA para un solo usuario.

Get-MGUserAuthenticationMethod -userid abbie.peters@activedirectorypro.com | fl

En este ejemplo, estoy comprobando el estado de MFA del usuario abbie.peters@activedirectorypro.com.

El método de autenticación de microsoft.graph.passwordAuthenticationMethod es el único método enumerado, lo que significa que MFA no está habilitado para este usuario.

Ahora verificaré los métodos de autenticación de mi cuenta.

En la captura de pantalla anterior, puede ver que mi cuenta devuelve múltiples métodos de autenticación, esto significa que mi cuenta tiene MFA habilitado.

Se vuelve mucho más complicado cuando verificas a todos los usuarios, la buena noticia es que he creado un script que puedes usar.

Ejemplo 2. Informe de Office 365 sobre el estado de MFA para todos los usuarios PowerShell

Puede copiar el script a continuación o descargar el script de PowerShell MFAStatusReport.ps1.

De forma predeterminada, el script obtendrá el estado MFA para todos los usuarios. Te mostraré cómo cambiarlo para verificar el estado de una lista de usuarios.

Nota: Dependiendo de cuántos usuarios tenga en su inquilino, la secuencia de comandos puede tardar varios minutos en completarse.

<#
=============================================================================================
Name:           Get MFA Status Report
Description:    Gets MFA status for all users and authentication methods
Version:        1.0
Website:        activedirectorypro.com
Script by:      activedirectorypro.com
Instructions:   https://activedirectorypro.com/mfa-status-powershell
============================================================================================
#>

#Get all Azure users
$users = get-mguser -All

$results=@();
Write-Host  "`nRetreived $($users.Count) users";
#loop through each user account
foreach ($user in $users) {

Write-Host  "`n$($user.UserPrincipalName)";
$myObject = [PSCustomObject]@{
    user               = "-"
    MFAstatus          = "_"
    email              = "-"
    fido2              = "-"
    app                = "-"
    password           = "-"
    phone              = "-"
    softwareoath       = "-"
    tempaccess         = "-"
    hellobusiness      = "-"
}

$MFAData=Get-MgUserAuthenticationMethod -UserId $user.UserPrincipalName #-ErrorAction SilentlyContinue

$myobject.user = $user.UserPrincipalName;
    #check authentication methods for each user
    ForEach ($method in $MFAData) {
	
        Switch ($method.AdditionalProperties["@odata.type"]) {
          "#microsoft.graph.emailAuthenticationMethod"  { 
             $myObject.email = $true 
             $myObject.MFAstatus = "Enabled"
          } 
          "#microsoft.graph.fido2AuthenticationMethod"                   { 
            $myObject.fido2 = $true 
            $myObject.MFAstatus = "Enabled"
          }    
          "#microsoft.graph.microsoftAuthenticatorAuthenticationMethod"  { 
            $myObject.app = $true 
            $myObject.MFAstatus = "Enabled"
          }    
          "#microsoft.graph.passwordAuthenticationMethod"                {              
                $myObject.password = $true 
                # When only the password is set, then MFA is disabled.
                if($myObject.MFAstatus -ne "Enabled")
                {
                    $myObject.MFAstatus = "Disabled"
                }                
           }     
           "#microsoft.graph.phoneAuthenticationMethod"  { 
            $myObject.phone = $true 
            $myObject.MFAstatus = "Enabled"
          }   
            "#microsoft.graph.softwareOathAuthenticationMethod"  { 
            $myObject.softwareoath = $true 
            $myObject.MFAstatus = "Enabled"
          }           
            "#microsoft.graph.temporaryAccessPassAuthenticationMethod"  { 
            $myObject.tempaccess = $true 
            $myObject.MFAstatus = "Enabled"
          }           
            "#microsoft.graph.windowsHelloForBusinessAuthenticationMethod"  { 
            $myObject.hellobusiness = $true 
            $myObject.MFAstatus = "Enabled"
          }                   
        }
    }

##Collecting objects
$results+= $myObject;

}
# Display the custom objects
$results

Para ejecutar el script, abra PowerShell y primero conéctese a MS Graph.

Connect-MgGraph -Scopes "User.Read.All"

Luego ingrese la ruta y el nombre del script para ejecutarlo.

El script mostrará cuántas cuentas encontró y generará la cuenta que está procesando.

Cuando se complete el script, mostrará el estado de MFA y los métodos de autenticación para cada usuario.

Para exportar el informe de estado de MFA a CSV, utilice el parámetro export-CSV.

.\MFAStatusReport.ps1 | export-csv -path c:\it\mfastatus-csv

Verifique el estado de MFA para obtener una lista de usuarios

Si desea ejecutar el script en una lista de usuarios, comente la línea n.° 14 y agregue este código.

$users = ForEach ($mguser in $(get-content -path C:\it\users.txt)) {
get-mguser -userid $mguser
}

Luego cree un archivo de texto con una lista de usuarios. Puede guardar la lista en cualquier lugar que desee, solo asegúrese de actualizar la ruta en el script.

Ahora ejecute el script y solo procesará las cuentas enumeradas en el archivo de texto.

Informe de estado de MFA con el kit de herramientas de la GUI de Azure

Estoy trabajando en una herramienta gráfica que incluye varios informes y herramientas para administrar Azure y Office 365. Podrás generar informes MFA con solo hacer clic en un botón.

Si quieres ser un tester beta de esta herramienta consulta la página de contacto.

Lista de métodos de autenticación MFA

A continuación se muestra una lista de los métodos de autenticación que comprueba el script de PowerShell.

  • emailAuthenticationMethod: representa una dirección de correo electrónico registrada para un usuario
  • fido2AuthenticationMethod: clave de seguridad FIDO2 registrada para un usuario (dispositivo USB)
  • microsoftAuthenticatorAuthenticationMethod: esta es la aplicación de autenticación de Microsoft.
  • contraseñaAuthenticationMethod: la contraseña del usuario.
  • phoneAuthenticationMethod: esto significa que un usuario ha registrado su teléfono mediante SMS o llamada de voz.
  • softwareOathAuthenticationMethod: token OATH de software registrado para un usuario.
  • temporalAccessPassAuthenticationMethod: código de acceso temporal por tiempo limitado.
  • windowsHelloForBusinessAuthenticationMethod: Windows Hello para empresas registradas para un usuario.

En el script, estos tendrán #microsoft.graph en el nombre.

Para obtener más información sobre los métodos de autenticación, consulte el artículo de Microsoft Tipo de recurso AuthenticationMethods.

Espero que este artículo te haya resultado útil. Si tienes comentarios o preguntas, publícalos a continuación.

Artículos relacionados:

  • Cómo exportar usuarios de Active Directory a CSV
  • PowerShell Obtener miembros del grupo
  • Obtenga PowerShell de usuario de Azure AD

Artículos relacionados