Búsqueda de sitios web

Exporte usuarios de Microsoft Entra ID a CSV con PowerShell


Queremos exportar la información de los usuarios de Microsoft Entra ID a CSV con PowerShell. ¿Por qué necesitamos enumerar los usuarios de Microsoft Entra ID con PowerShell? Por ejemplo, queremos saber si cada usuario de Microsoft Entra ID tiene los atributos correctos. Esto se debe a que la mesa de servicio necesita esta información. En este artículo, aprenderá cómo exportar usuarios de Microsoft Entra ID a un archivo CSV con PowerShell.

Exportación de información Usuarios de Microsoft Entra ID Script de PowerShell

El script de PowerShell Export-EntraIDUsers.ps1 se ejecutará en el inquilino de Microsoft Entra. Después de eso, exportará el informe a un archivo CSV. Puede abrir el archivo CSV con Microsoft Excel o cualquier otra aplicación que admita la extensión de archivo CSV.

El script recopilará la siguiente información por usuario:

  1. IDENTIFICACIÓN
  2. Nombre de pila
  3. Apellido
  4. Nombre para mostrar
  5. Nombre principal de usuario
  6. Nombre de dominio
  7. Dirección de correo electrónico
  8. Título profesional
  9. Nombre para mostrar del administrador
  10. Nombre principal del usuario administrador
  11. Departamento
  12. Compañía
  13. Oficina
  14. ID de empleado
  15. Móvil
  16. Teléfono
  17. Calle
  18. Ciudad
  19. Código Postal
  20. Estado
  21. País
  22. Tipo de usuario
  23. Sincronización local
  24. Estado de la cuenta
  25. Cuenta creada el
  26. Último inicio de sesión exitoso (requiere una licencia Microsoft Entra ID P1/P2)
  27. Con licencia
  28. Estado de MFA (incluidos los métodos de autenticación)

Exporte usuarios de Microsoft Entra ID a CSV con PowerShell

Sigamos los pasos y exportemos los usuarios de Microsoft Entra ID a un archivo CSV con PowerShell.

Paso 1. Instale Microsoft Graph PowerShell

Ejecute Windows PowerShell como administrador e instale Microsoft Graph PowerShell.

Install-Module Microsoft.Graph -Force
Install-Module Microsoft.Graph.Beta -AllowClobber -Force

Importante: Instale siempre los módulos Microsoft Graph PowerShell y Microsoft Graph Beta PowerShell. Esto se debe a que algunos cmdlets aún no están disponibles en la versión final y no funcionarán. Actualice ambos módulos a la última versión antes de ejecutar un cmdlet o script para evitar errores y resultados incorrectos.

Paso 2. Conéctese a Microsoft Graph PowerShell

Conéctese a Microsoft Entra con Microsoft Graph PowerShell.

Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All", "AuditLog.Read.All"

Ingrese sus credenciales de administrador global y acepte la solicitud de permisos de Microsoft Graph.

Paso 3. Prepare el script de PowerShell para exportar a los usuarios de Microsoft Entra ID

Cree dos carpetas en la unidad (C:):

  • Temperatura
  • Guiones

Descargue y coloque el script de PowerShell Export-EntraIDUsers.ps1 en la carpeta C:\scripts. El script exportará el archivo CSV a la carpeta C:\temp.

Asegúrese de que el archivo esté desbloqueado para evitar errores al ejecutar el script. Lea más en el artículo Error sin firma digital al ejecutar el script de PowerShell.

Otra opción es copiar y pegar el siguiente código en el Bloc de notas. Asígnele el nombre Export-EntraIDUsers.ps1 y colóquelo en la carpeta C:\scripts.

<#
    .SYNOPSIS
    Export-EntraIDUsers.ps1

    .DESCRIPTION
    Export Microsoft Entra ID users to CSV file.

    .LINK
    www.alitajran.com/export-microsoft-entra-id-users-to-csv-powershell

    .NOTES
    Written by: ALI TAJRAN
    Website:    www.alitajran.com
    LinkedIn:   linkedin.com/in/alitajran

    .CHANGELOG
    V1.10, 06/20/2023 - Initial version
    V1.10, 06/21/2023 - Added license status and MFA status including methods
    V1.20, 06/22/2023 - Added progress bar and last sign in date
    V1.30, 07/24/2023 - Update for Microsoft Graph PowerShell changes
    V1.40, 04/07/2024 - Added domain name
#>

# Connect to Microsoft Graph API
Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All", "AuditLog.Read.All"

# Create variable for the date stamp
$LogDate = Get-Date -f yyyyMMddhhmm

# Define CSV file export location variable
$Csvfile = "C:\temp\AllEntraIDUsers_$LogDate.csv"

# Retrieve users using the Microsoft Graph API with property
$propertyParams = @{
    All            = $true
    # Uncomment below if you have Microsoft Entra ID P1/P2 to get last sign in date
    # Property = 'SignInActivity'
    ExpandProperty = 'manager'
}

$users = Get-MgBetaUser @propertyParams
$totalUsers = $users.Count

# Initialize progress counter
$progress = 0

# Initialize an array to store user objects
$userObjects = @()

# Loop through all users and collect user objects
foreach ($index in 0..($totalUsers - 1)) {
    $user = $users[$index]

    # Update progress counter
    $progress++

    # Calculate percentage complete
    $percentComplete = ($progress / $totalUsers) * 100

    # Define progress bar parameters
    $progressParams = @{
        Activity        = "Processing Users"
        Status          = "User $($index + 1) of $totalUsers - $($user.userPrincipalName) - $($percentComplete -as [int])% Complete"
        PercentComplete = $percentComplete
    }

    # Display progress bar
    Write-Progress @progressParams

    # Get manager information
    $managerDN = $user.Manager.AdditionalProperties.displayName
    $managerUPN = $user.Manager.AdditionalProperties.userPrincipalName

    # Create an object to store user properties
    $userObject = [PSCustomObject]@{
        "ID"                          = $user.id
        "First name"                  = $user.givenName
        "Last name"                   = $user.surname
        "Display name"                = $user.displayName
        "User principal name"         = $user.userPrincipalName
        "Domain name"                 = $user.userPrincipalName.Split('@')[1]
        "Email address"               = $user.mail
        "Job title"                   = $user.jobTitle
        "Manager display name"        = $managerDN
        "Manager user principal name" = $managerUPN
        "Department"                  = $user.department
        "Company"                     = $user.companyName
        "Office"                      = $user.officeLocation
        "Employee ID"                 = $user.employeeID
        "Mobile"                      = $user.mobilePhone
        "Phone"                       = $user.businessPhones -join ','
        "Street"                      = $user.streetAddress
        "City"                        = $user.city
        "Postal code"                 = $user.postalCode
        "State"                       = $user.state
        "Country"                     = $user.country
        "User type"                   = $user.userType
        "On-Premises sync"            = if ($user.onPremisesSyncEnabled) { "enabled" } else { "disabled" }
        "Account status"              = if ($user.accountEnabled) { "enabled" } else { "disabled" }
        "Account Created on"          = $user.createdDateTime
        # Uncomment below if you have Microsoft Entra ID P1/P2 to get last succesful sign in date
        # "Last sign in"                 = if ($user.SignInActivity.LastSuccessfulSignInDateTime) { $user.SignInActivity.LastSuccessfulSignInDateTime } else { "No sign in" }
        "Licensed"                    = if ($user.assignedLicenses.Count -gt 0) { "Yes" } else { "No" }
        "MFA status"                  = "-"
        "Email authentication"        = "-"
        "FIDO2 authentication"        = "-"
        "Microsoft Authenticator App" = "-"
        "Password authentication"     = "-"
        "Phone authentication"        = "-"
        "Software Oath"               = "-"
        "Temporary Access Pass"       = "-"
        "Windows Hello for Business"  = "-"
    }

    $MFAData = Get-MgBetaUserAuthenticationMethod -UserId $user.userPrincipalName

    # Check authentication methods for each user
    foreach ($method in $MFAData) {
        Switch ($method.AdditionalProperties["@odata.type"]) {
            "#microsoft.graph.emailAuthenticationMethod" {
                $userObject."Email authentication" = $true
                $userObject."MFA status" = "Enabled"
            }
            "#microsoft.graph.fido2AuthenticationMethod" {
                $userObject."FIDO2 authentication" = $true
                $userObject."MFA status" = "Enabled"
            }
            "#microsoft.graph.microsoftAuthenticatorAuthenticationMethod" {
                $userObject."Microsoft Authenticator App" = $true
                $userObject."MFA status" = "Enabled"
            }
            "#microsoft.graph.passwordAuthenticationMethod" {
                $userObject."Password authentication" = $true
                # When only the password is set, then MFA is disabled.
                if ($userObject."MFA status" -ne "Enabled") {
                    $userObject."MFA status" = "Disabled"
                }
            }
            "#microsoft.graph.phoneAuthenticationMethod" {
                $userObject."Phone authentication" = $true
                $userObject."MFA status" = "Enabled"
            }
            "#microsoft.graph.softwareOathAuthenticationMethod" {
                $userObject."Software Oath" = $true
                $userObject."MFA status" = "Enabled"
            }
            "#microsoft.graph.temporaryAccessPassAuthenticationMethod" {
                $userObject."Temporary Access Pass" = $true
                $userObject."MFA status" = "Enabled"
            }
            "#microsoft.graph.windowsHelloForBusinessAuthenticationMethod" {
                $userObject."Windows Hello for Business" = $true
                $userObject."MFA status" = "Enabled"
            }
        }
    }

    # Add user object to the array
    $userObjects += $userObject
}

# Complete the progress bar
Write-Progress -Activity "Processing Users" -Completed

# Export all user objects to CSV
$userObjects | Sort-Object "Display name" | Export-Csv -Path $Csvfile -NoTypeInformation -Encoding UTF8 #-Delimiter ";"

Así es como se ve.

Paso 4. Ejecute el script de PowerShell para exportar usuarios de Microsoft Entra ID

Ejecute el script de PowerShell para exportar los usuarios de Microsoft Entra ID a un archivo CSV. Espere hasta que se complete.

C:\scripts\.\Export-EntraIDUsers.ps1

Paso 5. Verificar que los usuarios de Microsoft Entra ID informen el archivo CSV

Vaya a la carpeta temp y verifique que ve el archivo AllEntraIDUsers_.

Abra el archivo CSV con su aplicación favorita. En nuestro ejemplo, es Microsoft Excel.

¡Todo luce fantástico!

Leer más: Migrar Microsoft Entra Connect a un nuevo servidor »

Conclusión

Aprendió a exportar usuarios de Microsoft Entra ID a CSV con PowerShell. Hay mucha información en cada cuenta de usuario. Con PowerShell, puede tener un informe personalizado que se adapte a sus necesidades.

¿Disfrutaste este artículo? También te puede gustar Buscar cuentas de Microsoft Entra Connect. No olvides seguirnos y compartir este artículo.

Artículos relacionados