jueves, 23 de abril de 2020

Obtener 'user logon name' dada una lista de nombres de personas en Active Directory



Cómo obtener el nombre de usuario de alguien en Active Directory sabiendo su nombre propio.



Puede que necesitemos saber el nombre de usuario (user logon name) de Active Directory de una lista de trabajadores de un depertamento de una empresa para aplicarles una configuración concreta. Si son 2 usuarios podemos buscarlos de forma manual, pero si tenemos que conseguir el user logon name de una cantidad considerable de usuarios, lo más efectivo es usar un script que lo haga por nosotros.

A continuación, muestro un par de scripts que nos permiten recuperar el user logon name de un usuario (o lista de usuarios) dado su nombre completo (full name) sobre un directorio activo corriendo en Windows Server 2016 o superior.

Imaginemos que tenemos una lista de usuarios llamada users.txt con nombres propios de usuarios, por ejemplo, Juan García, Javier Torres, Marta Varela, etc. uno en cada línea. Para extraer sus nombres de usuario de Active Directory podemos usar el siguiente script:

$List = Get-Content ".\users.txt"
ForEach ($User in $List) {
Get-ADUser -Filter "Name -eq '$User'" | Select-Object name, samaccountname
} 

El output del script será:

PS C:\Temp> C:\Temp\script.ps1 name samaccountname ---- -------------- Juan Garcia jgarcia Javier Torres jtorres Marta Varela mvarela Álvaro Gutiérrez agutierrez Martín Pérez mperez

De esta forma veremos el output en la terminal, pero ¿qué ocurre si queremos exportar el resultado a un archivo, como por ejemplo, un csv?

Con el siguiente script podemos escribir los nombres propios y los user logon name en un csv:

$aResults = @()
$List = Get-Content ".\users.txt"
ForEach($Item in $List){
$Item = $Item.Trim()
$User = Get-ADUser -Filter "Name -eq '$Item'" | Select-Object name, samaccountname
$hItemDetails = New-Object -TypeName psobject -Property @{
FullName = $Item
UserName = $User.SamAccountName
}
#Add data to array
$aResults += $hItemDetails
}
$aResults | Export-CSV ".\Results.csv"

Podemos modificar el script para escribir solo los user logon name en el archivo, si así lo necesitamos, quitando el parámetro name del selector Select-Object.


Fuentes:

https://stackoverflow.com/questions/20196647/get-users-samaccount-name-from-full-name

0 comentarios:

Publicar un comentario