Entre los miles (?) de pedidos que recibo diariamente, me tocó algo que crei interesante compartir.
Me pidieron un reporte que incluyera los grupos a los que pertenecen una lista de usuarios. OBVIAMENTE no lo iba a hacer a mano, asi que…
Powershell!
Los puntos a tener en cuenta son los siguientes:
- c:\datos es la ruta de donde, por defecto, se toma el archivo de usuarios y se guarda el reporte.
- lista de usuarios.txt debe contener la lista de usuarios.
- En caso de que se quieran seleccionar usuarios con algun filtro, se puede usar get-aduser -filter {enabled -eq $true} (Para usuarios habilitados, por ejemplo)
- Devuelve un csv con el nombre “Reporte Usuarios”.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## Agregar el modulo de Active Directory. | |
import-module activedirectory | |
$Final=@() | |
## Apunta a la ruta donde esta el archivo | |
$ruta="c:\datos" | |
## Apunta al archivo | |
$archivo="lista de usuarios.txt" | |
## Obtiene una lista de todos los usuarios que esten habiliados. | |
$usuariostotal= get-content $ruta\$archivo | |
foreach ($usuario in $usuariostotal){ | |
## Guarda el nombre del usuario. | |
$nombre=$usuario.name | |
## Guarda el username. | |
$user=$usuario.samaccountname | |
$Completo=@() | |
$Grupos="ERROR DESCONOCIDO" | |
$primero=$true | |
$agregar="" | |
## Busca los grupos a los que pertenece el usuario. | |
$Completo=get-ADPrincipalGroupMembership $user | select-object name | |
$cantidad=$Completo.count | |
## Por cada grupo hace una iteracion. | |
for($a=0;$a -lt ($cantidad);$a++){ | |
if ($primero){ | |
$primero=$false | |
## Toma el nombre del grupo y lo pasa a una variable. | |
$agregar=$Completo[$a].name | |
## Agrega la variable anterior a $grupos para dejarlo todo en una sola variable. | |
$Grupos="$agregar" | |
} | |
else{ | |
$agregar=$Completo[$a].name | |
$Grupos+=", $agregar" | |
} | |
} | |
$Final+=$usuario | select-object @{Expression={$nombre};Label="Nombre"},@{Expression={$user};Label="Username"}, @{expression={$Grupos};Label="Grupos"},@{expression={$cantidad};Label="Cantidad"} | |
} | |
## Exporta el reporte a un CSV | |
$Final | export-csv $ruta\"ReporteUsuarios.csv" |
Esto es todo por hoy!
Hola, me aparece el siguiente error:
Get-ADPrincipalGroupMembership : No se puede validar el argumento del parámetro ‘Identity’. El argumento es null o está vacío. Proporcione un argumento que no sea null o que no esté vacío e intente ejecutar el comando de nuevo.
En C:\Script_AD\Script\Consulta3.ps1: 24 Carácter: 43
+ $Completo=get-ADPrincipalGroupMembership $user | select-object na …
+ ~~~~~
+ CategoryInfo : InvalidData: (:) [Get-ADPrincipalGroupMembership], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADPrincipalGroupMembership
Hola! Proba de correrlo copiando linea por linea, y fijate que tiene asignado la variable $user!
Luke, te hago una consulta, como tendria que ser el archivo de lista de usuarios.txt? en el sentido de por ej:
name: Ernesto
samaccountname: Gonzalez
name: Max
samaccountname: Rodriguez
name: xxxxx
samaccountname: xxxx
Ese estilo?
Mil gracias