PowerShell: Como exportar a Excel usuarios de Active Directory

En esta entrada voy a explicaros un par de formas de exportar a un fichero Excel los usuarios de Active Directory.

Exportación mediante el comando CSVDE

En primer lugar abriremos la consola de PowerShell en el servidor de dominio.

Exportar todos los usuarios

Para exportar todos los usuarios existentes en nuestro dominio con sus correspondientes atributos simplemente ejecutaremos el siguiente comando:

csvde -r "(objectclass=user)" -f c:/usuarios.csv

Exportar usuarios de una OU

Si en cambio queremos realizar la exportación pero de una OU concreta, en nuestro ejemplo los usuarios que se encuentren dentro de la OU Clientes, tendremos que ejecutar el siguiente comando:

CSVDE -d "OU=Clientes,DC=dominio,DC=com" -r objectClass=user -f c:/usuarios.csv

En el caso que queramos obtener los usuarios que se encuentran dentro de una OU que a su vez se encuentra dentro de otra, en nuestro ejemplo la OU principal sería Clientes y la OU secundaria sería Madrid, tendremos que utilizar el comando de la siguiente manera, es decir, igual que el ejemplo anterior pero montando los filtros de OU desde atrás hacia adelante.

CSVDE -d "OU=Madrid,OU=Clientes,DC=dominio,DC=com" -r objectClass=user -f c:/usuarios.csv 

Exportación mediante el comando Get-ADUser

Abriremos la consola de PowerShell en el controlador de dominio.

Exportar todos los usuarios

Vamos a exportar todos los usuarios del dominio pero en esta ocasión sólo queremos que nos exporte a Excel una serie de atributos del usuario en concreto. Para nuestro ejemplo, exportaremos sólo los atributos (podremos definir los que necesitemos) Name, UserPrincipalName, Enabled, distinguishedName. Para ello ejecutaremos el siguiente comando en la consola de PowerShell:

Get-ADUser -Filter * -Properties Name,UserPrincipalName,Enabled,distinguishedName | Select-Object Name,UserPrincipalName,Enabled,distinguishedName | Export-CSV 'c:\Usuarios.csv'

Exportar usuarios de una OU

En el caso de querer obtener la misma información pero en este caso de una OU en concreto, para nuestro ejemplo será la OU Clientes, tendremos que ejecutar el comando de la siguiente forma:

Get-ADUser -Filter * -SearchBase "OU=Clientes,DC=dominio,DC=com" -Properties Name,UserPrincipalName,Enabled,distinguishedName | Select-Object Name,UserPrincipalName,Enabled,distinguishedName | Export-CSV 'c:\Usuarios.csv' 

Si queremos rizar un poco más el rizo y queremos obtener los usuarios que se encuentran dentro de una OU que a su vez se encuentra dentro de otra tendremos que ir agregando las OU dentro del parámetro «SearchBase» de atrás hacia adelante. En nuestro ejemplo obtendremos los usuarios que se encuentran dentro de la OU Madrid que su vez se encuentra dentro de la OU Clientes.

Get-ADUser -Filter * -SearchBase "OU=Madrid,OU=Clientes,DC=dominio,DC=com" -Properties Name,UserPrincipalName,Enabled,distinguishedName | Select-Object Name,UserPrincipalName,Enabled,distinguishedName | Export-CSV 'c:\Usuarios.csv'  

Exportar todos los usuarios excepto de una OU concreta

Si queremos obtener todos los usuarios de nuestro Active Directory excepto los que se encuentren dentro de una OU concreta, para nuestro ejemplo será la OU Clientes, tendremos que ejecutar el comando de la siguiente forma:

Get-ADUser -Filter * -Properties Name,UserPrincipalName,Enabled,distinguishedName | Select-Object Name,UserPrincipalName,Enabled,distinguishedName | where {$_.DistinguishedName -notlike “*OU=Clientes,DC=dominio,DC=com"} | Export-CSV 'c:\Usuarios.csv'

Y listo, con cualquiera de estos 2 métodos podréis sacar de una forma fácil y sencillas los usuarios de vuestro dominio.

Espero os haya servido de utilidad.

Entradas relacionadas

22 comentarios en «PowerShell: Como exportar a Excel usuarios de Active Directory»

  1. hola, necesito exportar a excel los miembros de Todos los grupos del directorio activo, no de un grupo en especifico sino de todos. tengo el codigo de consulta y me los muestra en powers pero al exportarlo a excel no me los lleva. me podrias ayudar por favor? estoy apenas aprendiendo powershell

    Responder
    • Hola Sandra,

      Entiendo que lo que necesitas es obtener un listado de todos los usuarios existentes en Active Directory, si es así en la misma entrada lo tienes, concretamente, donde pone Exportar todos los usuarios. Tienes 2 métodos de hacerlo, mediante el comando CSVDE o el comando Get-ADUser.

      No sé si esto te ayuda o no he comprendido bien tu problema.

      Responder
    • Hola Miguel,

      El proceso de exportación es algo más complejo ya que hay que montar un script en PowerShell con bucles, etc…, no es una simple instrucción como la exportación.
      Ahora mismo no lo tengo hecho pero me lo apunto para hacerlo en un futura entrada y compartirlo con todo aquel que le pueda ser de utilidad.

      Saludos.

      Responder
  2. Hola Sergio Portillo por favor solicito tu ayuda; debo exportar los usuarios del AD pero debo excluir una OU especifica que es demasiado grande y no es necesaria.

    Agradezco tu ayuda

    Responder
    • Hola Luis,

      Puedes utilizar el siguiente comando para hacer lo que necesitas:

      Get-ADUser -Filter * -Properties Name,UserPrincipalName,Enabled,distinguishedName | Select-Object Name,UserPrincipalName,Enabled,distinguishedName | where {$_.DistinguishedName -notlike “*OU=LA QUE QUIERAS EXCLUIR,DC=dominio,DC=com»} | Export-CSV ‘c:\Prueba\Usuarios.csv’

      Recuerda cambiar la parte de OU por el nombre de la que necesites excluir, el nombre del dominio y la ruta donde se exportará el fichero CSV.

      Espero te sirva.
      Saludos.

      Responder
  3. SUPER!!! Muchas Gracias Sergio Portillo funciono perfecto disculpa no haberte escrito antes, estoy muy agradecido Gracias nuevamente.

    Responder
  4. Buen día Sergio, agradezco la información que nos bridaste, me ha resultado de mucha utilidad. Muy bueno tu blog. Felicitaciones

    Responder
  5. Definitivamente tus aportes y ayudas están muy bien explicadas gracias por los ejercicios en powershell y tu blog me han servido muchísimo nuevamente Gracias Totales.

    Responder
  6. Hola Sergio, como poder exportar todos los usuarios y que me indique cuando sera su proximo cambio de password, necesito ese dato.

    Gracias Amigo

    Responder
    • Hola Edgardo,

      No existe un atributo en Active Directory que te indique la fecha del próximo cambio de contraseña pero se me ocurre que en la consulta añadas el atributo pwdLastSet que te dará la fecha en la que se produjo el último cambio de contraseña de cada uno de los usuarios y luego en el Excel que se exporta puedes crear una columna calculada a la que le sumes el número de días que tengas configurado en tu Active Directory a la fecha del último cambio y así debería darte el dato que necesitas.

      Espero te haya servido de ayuda.

      Saludos.

      Responder
  7. Buen dia

    Sergio por favor tu ayuda debo colocar un comentario a los objetos que se encuentran en el AD son aproximadamente 3.000 objetos en la pestaña de Telefonos en el campo de Notas: estuve buscando y encontre este script funciona pero me borra las notas anteriores.
    ¿Existe alguna manera de poder adicionar las notas, sin que me borre los primeros comentarios en el objeto?

    SET-ADUSER prueba -replace @{info=»Prueba es temporal hasta 12(m)/20(d)/2020″}

    Ejemplo:
    Objeto prueba, pestaña de Telefonos, Campo Notas
    Al ejecutarlo se borra las notas entre comillas.

    Notas:

    «Prueba se creo 09(m)/25(d)/2020»
    Prueba es temporal hasta 12(m)/20(d)/2020

    Agradezco valiosa ayuda Sergio portillo!!!

    Responder
    • Hola Luis,

      Prueba algo como esto.

      Lo he hecho sobre la marcha pero no lo he podido probar porque ahora mismo no tengo un PC para hacerlo. Pruébalo y sino te funciona dímelo y te lo miro más tranquilamente.

      Get-ADuser -Identity prueba -Properties info |
      ForEach-Object{
      $info = $_.Info
      $_|Set-ADuser -Replace @{info=»$Info`nNuevo texto»}
      }

      Saludos.

      Responder
  8. Muchas Gracias Sergio Portillo funciona bien, lo raro es que el nuevo comentario no toma el nuevo renglon pero veo que si tiene el caracter especial `n deberia funcionar solo me da un espacio.

    Responder
    • Prueba añadiendo el carácter especial ‘r. El script quedaría así:

      Get-ADuser -Identity prueba -Properties info |
      ForEach-Object{
      $info = $_.Info
      $_|Set-ADuser -Replace @{info=”$Info `r`nNuevo texto”}
      }

      Responder
  9. Hola Sergio la verdad estoy muy agradecido por tus aportes para quienes tenemos dudas respecto a estos conocimientos, me han sido de gran ayuda muchas Gracias funciono perfecto bendiciones!

    Responder
  10. Hola Sergio, buenísimos tus aportes.
    Tienes idea de cómo exportar el lastlogon de los usuarios que se conectan a través de AzureAD??? Necesito sacar esa información para un reporte y no he podido extraerla
    Muchas gracias

    Responder
    • Hola Daniel,

      Desconozco cómo hacerlo, siento no poder ayudarte. A ver si alguna de las personas que lea el comentario sabe hacerlo y nos lo indica.

      Saludos.

      Responder
  11. Hola Daniel yo necesito poder generar un csv que tenga todos los grupos de todo el AD y con los mismbros de los mismos y lo ideal seria que ese listado tambien tenga Tipo de grupo ( seguridad / distribucion ) y si es local/global/universal y ya que pido el campo DistinguishedName
    Desde ya muchas Gracias Pablo

    Responder
    • Hola Pablo,

      Tengo una entrada con un script que hace algo parecido a lo que necesitas, échale un vistazo porque seguramente haciendo algunos pequeños cambios puedes conseguir lo que necesitas.

      Este es el enlace a la entrada.

      Saludos.

      Responder

Deja un comentario