Búsqueda de sitios web

Cómo exportar usuarios de AD a CSV - Script gratuito


Para exportar sus usuarios de AD a CSV, podemos usar PowerShell y el cmdlet Get-ADUser. Esto nos permite exportar rápidamente todos los usuarios de su directorio activo a un archivo CSV utilizable.

Exportar sus usuarios para verificar si tienen configurados los atributos correctos es una tarea común para los administradores del sistema. Le permite verificar si todavía tienen la información de contacto correcta en la lista y si hay cuentas obsoletas que deba cerrar.

En este artículo, veremos cómo exportar usuarios de AD a CSV y al final tengo un script completo para usted.

Requisitos

Para exportar los usuarios de Active Directory, usaremos PowerShell. Deberá asegurarse de tener instalado el módulo Active Directory. Esto se instala de forma predeterminada en el controlador de dominio, pero si desea ejecutar los scripts o cmdlets desde una máquina diferente, deberá instalarlo.

Para instalar el módulo en computadoras con Windows 10/11, puede ejecutar el siguiente comando de PowerShell:

Add-WindowsCapability -online -Name “Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0”

Exportar usuarios de Active Directory a CSV

Para exportar los usuarios de su Active Directory a un archivo CSV, usaremos dos cmdlets, Get-ADuser y Export-CSV. El primer cmdlet obtendrá todos los usuarios de su AD y le permitirá seleccionar solo la información que necesita.

El segundo cmdlet exporta los datos seleccionados a un archivo CSV. Exportar a CSV es bastante sencillo, sólo necesita especificar la ruta y el nombre del archivo, como le mostraré en los pasos a continuación.

Como mencioné, tengo un script completo al final del artículo, pero es importante que comprendas cómo funciona para que puedas cambiarlo según tus necesidades. Es por eso que lo guiaré a través de los pasos necesarios para exportar usuarios de AD a un archivo CSV.

Paso 1: seleccionar los usuarios con Get-ADUser

El primer paso para exportar usuarios es seleccionar los usuarios que desea exportar desde Active Directory. Hacemos esto con el cmdlet Get-ADUser. Este cmdlet acepta diferentes filtros lo que nos permite seleccionar solo los usuarios que necesitamos.

Para obtener todos los usuarios de su dominio, con su nombre, dirección de correo electrónico y título, utilice el siguiente comando:

Get-ADUser -filter * -properties emailaddress,title | select name,emailaddress,title

Seleccionar y filtrar usuarios

No siempre desea exportar todos los usuarios de Active Directory. A veces solo necesita usuarios de una unidad organizativa específica o solo desea usuarios activos o deshabilitados. Para ello podemos utilizar diferentes opciones de filtrado:

  • Filtro: le permite filtrar los resultados, por ejemplo, por nombre, título o dirección de correo electrónico.

  • SearchBase: puede especificar de qué unidades organizativas desea obtener los usuarios.

  • Identidad: le permite especificar un usuario específico

Explicaré brevemente las diferentes opciones a continuación. Si desea saber más, asegúrese de leer este artículo sobre el cmdlet Get-ADUser. Entra más en detalles sobre cómo funcionan las diferentes opciones.

El parámetro -filter le permite encontrar todos los usuarios con un atributo particular. Por ejemplo, cuando desee exportar todos los usuarios con el título de trabajo "reparador", podemos usar el siguiente comando:

Get-ADUser -filter "title -eq 'fixer'" -properties * | select name, emailaddress, title | Export-CSV -path c:\temp\export.csv

También podemos usar el filtro para exportar solo las cuentas de usuario habilitadas, o solo las cuentas deshabilitadas:

# Export all disabled user accounts
# change false to true for enabled accounts

Get-ADUser -filter "enabled -eq 'false'" -properties * | select name, emailaddress, title | Export-CSV -path c:\temp\export.csv

La propiedad -SearchBase se utiliza para exportar solo las cuentas de usuario de una unidad organizativa particular en su Active Directory. Deberá utilizar el nombre completo de la unidad organizativa. Puede combinar la propiedad SearchBase con la propiedad SearchScope para determinar a cuántos niveles de profundidad desea llegar.

Get-ADUser -Filter * -SearchBase "OU=IT,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL" | Export-CSV -path c:\temp\export.csv

Paso 2: seleccionar las propiedades

Ahora que sabemos cómo seleccionar los usuarios que queremos exportar, podemos ver qué atributos queremos incluir en nuestra exportación. Si no especifica ninguna propiedad, solo se exporta cierta información básica, como el nombre, el ID del objeto y el nombre principal del usuario.

Para ver todas las propiedades que están disponibles en el cmdlet Get-ADUser, puede utilizar el siguiente comando. Esto devolverá todas las propiedades de un solo usuario:

Get-ADUser -filter * -properties * -ResultSetSize 1 | select *

# Or to view all properties from a specific user:
Get-ADUser -identity ztucker -properties * | select *

Cuando tenga la lista de propiedades que desea exportar, puede especificarlas en el parámetro -properties y seleccionar el resultado. Recomiendo probar/verificar el resultado primero en la consola antes de exportarlo a un archivo CSV.

En el siguiente ejemplo, seleccionamos el atributo de correo, título, administrador y oficina. Asegúrese de seleccionar también esos atributos con la instrucción de selección; de lo contrario, también obtendrá todos los campos predeterminados:

Get-ADUser -filter "enabled -eq 'true'" -properties mail, title, department, city | select name, 
 mail, title, department, city | ft

Cuando crea un script, le recomiendo colocar sus propiedades dentro de una tabla hash. La ventaja de las tablas hash es que puedes cambiar los atributos fácilmente y, en este caso, podemos usar la misma lista tanto para el parámetro de propiedades como para la declaración de selección.

$properties = @(
  'name',
  'userprincipalname',
  'mail',
  'title',
  'enabled',
  'department'
)

Get-ADUser -Filter * -Properties $properties | Select-Object $properties

Paso 3: exportar a CSV

Ahora hemos seleccionado los usuarios de Active Directory que queremos exportar y seleccionamos los atributos que queremos incluir en nuestra exportación CSV. El último paso es exportar los resultados a un archivo CSV. Para esto, usaremos el cmdlet Export-CSV.

El cmdlet Export-CSV solo requiere una ruta (con un nombre de archivo) para exportar el resultado. También recomiendo agregar los dos parámetros siguientes al cmdlet: -NoTypeInformation -Encoding UTF8. Esto eliminará el encabezado con información en su archivo CSV y garantizará que todos los caracteres se exporten con UTF8.

# Export all enabled user accounts with to a CSV file
Get-ADUser -filter "enabled -eq 'true'" -properties mail, title, department, city | select name, 
 mail, title, department, city | Export-CSV -path c:\temp\users.csv -NoTypeInformation -Encoding UTF8

Complete la exportación de usuarios de AD a un script CSV

He creado un script de PowerShell que exportará todos los usuarios de AD a CSV con las propiedades más comúnmente necesarias. Si especifica una ruta para el archivo CSV, el script creará el archivo CSV y abrirá Excel una vez que esté terminado.

Cuando ejecuta el script, especifica un par de opciones:

  • Obtener o no el nombre para mostrar del administrador (el valor predeterminado es verdadero)

  • Especifique la base de búsqueda (OU), directorio activo completo predeterminado

  • Obtener cuentas habilitadas o inhabilitadas, o ambas (solo habilitadas de forma predeterminada)

  • Exportar archivo CSV de ruta (ubicación predeterminada del script)

El script obtendrá todas las cuentas de usuario de Active Directory si no especifica la base de búsqueda (OU). También es posible especificar varias unidades organizativas:

.\Get-ADusers.ps1 -searchBase "OU=users,OU=Amsterdam,DC=LazyAdmin,DC=Local","OU=users,OU=Oslo,DC=LazyAdmin,DC=Local" -path c:\temp\users.csv

Puede encontrar la última versión del script aquí en mi repositorio de GitHub.

param(
  [Parameter(
    Mandatory = $false,
    HelpMessage = "Get the users manager"
  )]
  [switch]$getManager = $true,

  [Parameter(
    Mandatory = $false,
    HelpMessage = "Enter the searchbase between quotes or multiple separated with a comma"
    )]
  [string[]]$searchBase,

  [Parameter(
    Mandatory = $false,
    HelpMessage = "Get accounts that are enabled, disabled or both"
  )]
    [ValidateSet("true", "false", "both")]
  [string]$enabled = "true",

  [Parameter(
    Mandatory = $false,
    HelpMessage = "Enter path to save the CSV file"
  )]
  [string]$CSVpath
)

Function Get-Users {
    <#
    .SYNOPSIS
      Get users from the requested DN
    #>
    param(
      [Parameter(Mandatory = $true)]
      $dn
    )
    process{
      # Set the properties to retrieve
      $properties = @(
        'name',
        'userprincipalname',
        'mail',
        'title',
        'enabled',
        'manager',
        'department',
        'telephoneNumber',
        'office',
        'mobile',
        'streetAddress',
        'city',
        'postalcode',
        'state',
        'country',
        'description',
        'lastlogondate',
        'passwordlastset'
      )

      # Get enabled, disabled or both users
      switch ($enabled)
      {
        "true" {$filter = "enabled -eq 'true'"}
        "false" {$filter = "enabled -eq 'false'"}
        "both" {$filter = "*"}
      }

      # Get the users
      Get-ADUser -Filter $filter -Properties $properties -SearchBase $dn | Select-Object $properties
    }
}


Function Get-AllADUsers {
  <#
    .SYNOPSIS
      Get all AD users
  #>
  process {
    Write-Host "Collecting users" -ForegroundColor Cyan
    $users = @()

    if ($searchBase) {
     # Get the requested mailboxes
      foreach ($dn in $searchBase) {
        Write-Host "- Get users in $dn" -ForegroundColor Cyan
        $users += Get-Users -dn $dn
      }
    }else{
      # Get distinguishedName of the domain
      $dn = Get-ADDomain | Select-Object -ExpandProperty DistinguishedName
      Write-Host "- Get users in $dn" -ForegroundColor Cyan
      $users += Get-Users -dn $dn
    }

    $users | ForEach-Object {

      $manager = ""

      If (($getManager.IsPresent) -and ($_.manager)) {
        # Get the users' manager
        $manager = Get-ADUser -Identity $_.manager | Select-Object -ExpandProperty Name
      }

      [pscustomobject]@{
        "Name" = $_.Name
        "UserPrincipalName" = $_.UserPrincipalName
        "Emailaddress" = $_.mail
        "Job title" = $_.Title
        "Manager" = $manager
        "Department" = $_.Department
        "Office" = $_.Office
        "Phone" = $_.telephoneNumber
        "Mobile" = $_.mobile
        "Enabled" = $_.enabled
        "Street" = $_.StreetAddress
        "City" = $_.City
        "Postal code" = $_.PostalCode
        "State" = $_.State
        "Country" = $_.Country
        "Description" = $_.Description
        "Last login" = $_.lastlogondate
        "Password last set" = $_.passwordlastset
      }
    }
  }
}

If ($CSVpath) {
  # Get mailbox status
  Get-AllADUsers | Sort-Object Name | Export-CSV -Path $CSVpath -NoTypeInformation -Encoding UTF8
  if ((Get-Item $CSVpath).Length -gt 0) {
      Write-Host "Report finished and saved in $CSVpath" -ForegroundColor Green

      # Open the CSV file
      Invoke-Item $CSVpath
  } else {
      Write-Host "Failed to create report" -ForegroundColor Red
  }
} Else {
  Get-AllADUsers | Sort-Object Name | ft
}

Terminando

Exportar usuarios de Active Directory a una lista CSV realmente puede ayudarle a realizar un seguimiento de todos los usuarios y sus propiedades. Es bueno entender cómo puedes crear tus propios scripts para este tipo de tareas.

Espero que este artículo te haya ayudado a comprender cómo exportar usuarios desde tu AD a un archivo CSV. Si tiene alguna pregunta, simplemente deje un comentario a continuación.

Artículos relacionados