Búsqueda de sitios web

Exportar usuarios de AD a CSV con PowerShell


Queremos exportar la información de los usuarios de AD a CSV con PowerShell. ¿Por qué necesitamos enumerar los usuarios de AD con PowerShell? Por ejemplo, queremos saber si cada usuario de AD tiene el número de teléfono móvil correcto en Active Directory. Esto se debe a que la mesa de servicio busca la información en Active Directory antes de realizar una llamada. En este artículo, aprenderá cómo exportar usuarios de Active Directory a un archivo CSV con PowerShell.

Script de PowerShell para exportar información de usuarios de AD

El script de PowerShell Export-ADUsers.ps1 se ejecutará con el nombre distinguido que haya configurado. 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. Nombre de pila

  2. Apellido

  3. Nombre para mostrar

  4. Nombre de inicio de sesión del usuario

  5. Nombre principal de usuario

  6. Calle

  7. Ciudad

  8. Provincia del estado

  9. Código Postal/Código Postal

  10. País/región

  11. Título profesional

  12. Departamento

  13. Compañía

  14. Gerente

  15. UNED

  16. Descripción

  17. Oficina

  18. Número de teléfono

  19. Otro teléfono

  20. Correo electrónico

  21. Móvil

  22. Buscapersonas

  23. Notas

  24. Estado de la cuenta

  25. Fecha de creación del usuario

  26. Fecha del último inicio de sesión

Exportar usuarios de Active Directory a CSV con PowerShell

Sigamos los pasos y exportemos los usuarios de Active Directory a un archivo CSV con PowerShell.

Paso 1: preparar el script de PowerShell para exportar usuarios de AD

Descargue y coloque el script de PowerShell Export-ADUsers.ps1 en la carpeta del controlador de dominio C:\scripts. Si no tiene una carpeta de scripts, cree una.

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ígnale el nombre Export-ADUsers.ps1 y colócalo en la carpeta C:\scripts.

<#
    .SYNOPSIS
    Export-ADUsers.ps1

    .DESCRIPTION
    Export Active Directory users to CSV file.

    .LINK
    alitajran.com/export-ad-users-to-csv-powershell

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

    .CHANGELOG
    V1.00, 05/24/2021 - Initial version
    V1.10, 04/01/2023 - Added progress bar, user created date, and OU info
    V1.20, 05/19/2023 - Added function for OU path extraction
#>

# Split path
$Path = Split-Path -Parent "C:\scripts\*.*"

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

# Define CSV and log file location variables
# They have to be on the same location as the script
$Csvfile = $Path + "\AllADUsers_$LogDate.csv"

# Import Active Directory module
Import-Module ActiveDirectory

# Function to extract OU from DistinguishedName
function Get-OUFromDistinguishedName {
    param(
        [string]$DistinguishedName
    )

    $ouf = ($DistinguishedName -split ',', 2)[1]
    if (-not ($ouf.StartsWith('OU') -or $ouf.StartsWith('CN'))) {
        $ou = ($ouf -split ',', 2)[1]
    }
    else {
        $ou = $ouf
    }
    return $ou
}

# Set distinguishedName as searchbase, you can use one OU or multiple OUs
# Or use the root domain like DC=exoip,DC=local
$DNs = @(
    "OU=Sales,OU=Users,OU=Company,DC=exoip,DC=local",
    "OU=IT,OU=Users,OU=Company,DC=exoip,DC=local",
    "OU=Finance,OU=Users,OU=Company,DC=exoip,DC=local"
)

# Create empty array
$AllADUsers = @()

# Loop through every DN
foreach ($DN in $DNs) {
    $Users = Get-ADUser -SearchBase $DN -Filter * -Properties * 

    # Add users to array
    $AllADUsers += $Users

    # Display progress bar
    $progressCount = 0
    for ($i = 0; $i -lt $AllADUsers.Count; $i++) {

        Write-Progress `
            -Id 0 `
            -Activity "Retrieving User " `
            -Status "$progressCount of $($AllADUsers.Count)" `
            -PercentComplete (($progressCount / $AllADUsers.Count) * 100)

        $progressCount++
    }      
}

# Create list
$AllADUsers | Sort-Object Name | Select-Object `
@{Label = "First name"; Expression = { $_.GivenName } },
@{Label = "Last name"; Expression = { $_.Surname } },
@{Label = "Display name"; Expression = { $_.DisplayName } },
@{Label = "User logon name"; Expression = { $_.SamAccountName } },
@{Label = "User principal name"; Expression = { $_.UserPrincipalName } },
@{Label = "Street"; Expression = { $_.StreetAddress } },
@{Label = "City"; Expression = { $_.City } },
@{Label = "State/province"; Expression = { $_.State } },
@{Label = "Zip/Postal Code"; Expression = { $_.PostalCode } },
@{Label = "Country/region"; Expression = { $_.Country } },
@{Label = "Job Title"; Expression = { $_.Title } },
@{Label = "Department"; Expression = { $_.Department } },
@{Label = "Company"; Expression = { $_.Company } },
@{Label = "Manager"; Expression = { (Get-AdUser $_.Manager -Properties DisplayName).DisplayName } },
@{Label = "OU"; Expression = { Get-OUFromDistinguishedName $_.DistinguishedName } },
@{Label = "Description"; Expression = { $_.Description } },
@{Label = "Office"; Expression = { $_.Office } },
@{Label = "Telephone number"; Expression = { $_.telephoneNumber } },
@{Label = "Other Telephone"; Expression = { $_.otherTelephone -join ";"} },
@{Label = "E-mail"; Expression = { $_.Mail } },
@{Label = "Mobile"; Expression = { $_.mobile } },
@{Label = "Pager"; Expression = { $_.pager } },
@{Label = "Notes"; Expression = { $_.info } },
@{Label = "Account status"; Expression = { if (($_.Enabled -eq 'TRUE') ) { 'Enabled' } Else { 'Disabled' } } },
@{Label = "User created date"; Expression = { $_.WhenCreated } },
@{Label = "Last logon date"; Expression = { $_.lastlogondate } } |

# Export report to CSV file
Export-Csv -Encoding UTF8 -Path $Csvfile -NoTypeInformation #-Delimiter ";"
  • Línea 54,55,56: Edite el nombre distinguido de destino. Puede tener una unidad organizativa o varias unidades organizativas (en este ejemplo).

Paso 2: obtenga un nombre distinguido

Debe agregar el valor del nombre completo en el script de PowerShell. Siga los pasos a continuación para obtener el nombre distinguido en Active Directory:

  1. Iniciar Usuarios y equipos de Active Directory

  2. Haga clic con el botón derecho en la unidad organizativa de destino y haga clic en Propiedades.

  3. Vaya a la pestaña Editor de atributos

  4. Busque el atributo distuingedName en la lista de atributos

  5. Haga doble clic para abrir la cadena y copie el valor

Nota: Si no ve la pestaña Editor de atributos, haga clic en Usuarios y equipos de Active Directory en la barra de menú en Ver y habilite < fuerte>Funciones avanzadas.

Paso 3: Ejecute el script de PowerShell para exportar usuarios de AD

Ejecute PowerShell como administrador. Cambie la ruta a la carpeta scripts. Ejecute el script de PowerShell para exportar usuarios de AD a un archivo CSV. Espere hasta que se complete.

PS C:\> cd c:\scripts
PS C:\scripts> .\Export-ADUsers.ps1

Paso 4: Abra el archivo CSV del informe de usuarios de AD

Vaya a la carpeta de scripts y verifique que ve el archivo AllADUsers_.

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

¡Todo luce genial!

Leer más: Eliminar usuarios del grupo con PowerShell »

Conclusión

Aprendió a exportar usuarios de AD 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 Obtener unidades organizativas con PowerShell. No olvides seguirnos y compartir este artículo.

Artículos relacionados