miércoles, 20 de mayo de 2015

PS Exportar listado de usuarios.



Ha salido la necesidad de exportar todos los usuarios de nuestro directorio activo con un numero concreto de campos. Se ha decidido hacerlo con PowerShell.

Entre las pocas cosas que muestra se ve si el usuario esta bloqueado o deshabilitado.





·     Export-ADUsers.ps1: conecta con el PDCEmulator del dominio en el que se ejecuta y exporta todos los usuarios a un fichero de valores separados por tabulador (el script permite pasarle el parámetro -Delimiter para especificar otro delimitador). La ruta y nombre del fichero de exportación se puede pasar como parámetro u omitirse;  si se omite, se llamará yyyyMMdd_HHmm_Export-ADUsers.tab y estará en la misma carpeta del script (yyyyMMdd_HHmm se refiere a la fecha y hora en ese formato; por ejemplo 19 de Mayo de 2015 a las 14:30 sería 20150519_1430). Para no tener problemas con acentos, eñes, etc., el fichero de exportación está codificado como Unicode. La columna con la OU contiene el nombre distintivo (distinguishedName) de la OU en la que está el usuario.

Copiar en un Fichero con el nombre "Export-ADUsers.ps1" el siguiente texto:


<#
.Synopsis
   Exporta a un fichero de valores separados los usuarios del dominio
.DESCRIPTION
   El presente script exporta a un fichero de valores separados por tabulador, o el
   caracter que se especifique, los atributos Name, sAMAccountName, Enabled,
   LockedOut, mail, EmployeeID y OU (el nombre distintivo de la OU) de los usuario
   del dominio en el que se ejecuta.
.PARAM ExportFile
   Es la ruta y nombre del fichero (pueden usarse rutas absolutas o relativas así
   como sólo el nombre si el inductor de Powershell está situado en la carpeta donde
   se ubicará el fichero). Se trata de un fichero de valores separados por tabulador
   o el caracter que se pase como parametro delimiter.
   Si se omite, este parámetro tiene el valor yyyyMMdd_HHmm_Export-ADUsers.tab con
   la ruta donde está ubicado el script (si el script está en c:\Scripts el fichero será
   c:\Scripts\20150519_1430_Export-ADUser.tab).
.PARAM Delimiter
   Caracter delimitador del fichero de exportación. Si se omite será el tabulador.
.EXAMPLE
   PS C:\Scripts> .\Export-ADUsers.ps1
   Se exportan los usuarios al fichero de valores separados por tabulador
   c:\Scripts\20150519_1423_Export-ADUser.tab
.EXAMPLE
   PS C:\tmp> .\Export-ADUsers.ps1 -ExportFile c:\tmp\Usuarios.csv -Delimiter ","

   PS C:\PStest> .\Export-ADUsers.ps1 -ExportFile c:\PSTest\Usuarios.csv -Delimiter ","

   Se exportan los usuaios al fichero de valores separados por comas
   c:\ListadosAD\Usuarios.csv
.NOTES
   Requiere el módulo de Active Directory de Powershell
#>

param(
    $ExportFile="$(Split-Path -Path $Myinvocation.MyCommand.Path -Parent)\$(Get-Date -Format "yyyyMMdd`_HHmm")`_Export-ADUsers.tab",
    $Delimiter = "`t"
    )

If((Get-Module ActiveDirectory) -eq $null){Import-Module ActiveDirectory}
$Users = @()
$DC = (Get-ADDomain).PDCEmulator
$Properties = "Name,sAMAccountName,Enabled,LockedOut,mail,EmployeeID" -split ","
Get-AdUser -Filter * -Server $DC -Properties $Properties | ForEach{ `

   $User = New-Object PsCustomObject
   
   ForEach($Property In $Properties)
    {
        Add-Member -InputObject $User -MemberType NoteProperty -Name $Property -Value $_.$Property
    }
    $tempOU = $_.DistinguishedName -Replace "\\,",[char]20 
    $arrOU = $tempOU -split ","
    $OU = $arrOU[1..($arrOU.Count - 1)] -Replace [char]20,"\," 
    Add-Member -InputObject $User -MemberType NoteProperty -Name OU -Value "$($OU)"
    $USers += $User
}
$Users | Export-Csv -Path "$ExportFile" -Encoding Unicode -Delimiter $Delimiter -NoTypeInformation -Force


La ejecución:

Es posible que previamente tengas que hacer:



Luego ya será bastante fácil trabajar con esta información desde por ejemplo un Excel:

Con las Window 8 viene una herramienta para trabajar pon ps1



==========

Una opción básica de sacar un mayor número de información con un solo comando podría ser:
get-aduser -Filter * | Export-csv c:\tmp\usuarios.csv


===========

Unos comandos sencillo que nos pueden ayudar a localizar usuarios:


*Todos los usuarios y sus propiedades:
Get-ADUser -Filter * -Properties *

*Para un usuario hay que poner el contenido del campo  samAccountName no el de UserPrincipalName:
Get-ADUser Fernando.sanchez.alons -Properties *


Gon. Mayo 2015

No hay comentarios: