Principales respuestas
Listar propiedades de un Usuario de Active Directory y el grupo al que pertenece

Pregunta
-
Buenas Tarde,
Con el siguiente script se listan los usuario y algunas de sus propiedades en un archivo,PERO LO QUE DESEO EN REALIDAD ES AGREGARLE A ESTE SCRIPT UNA SECCIóN EN DONDE ME PUEDA LISTAR JUNTO AL USUARIO Y SUS PROPIEDADES LOS GRUPOS A LO QUE PERTENECES
EJEMPLO:
SamAccountName - DisplayName - EmployeeID - LastLogonDate - WhenCreated - Enabled - MemberOF
jcsuarez Juan Suarez 1345678 30/10/2016 30/01/2014 True Domain Admin
jcsuarez Juan Suarez 1345678 30/10/2016 30/01/2014 True Administrators
jcsuarez Juan Suarez 1345678 30/10/2016 30/01/2014 True Remote Control
jcsuarez Juan Suarez 1345678 30/10/2016 30/01/2014 True Entreprise
----------------------------------------------------
LISTAR USUARIO Y PRPIEDADES
---------------------------------
Import-Module Activedirectory
$Users = (Get-ADUser –filter * -properties * | select-object SamAccountName,DisplayName,EmployeeID,LastLogonDate,WhenCreated,enabled )
$Table = @()
$Record = @{
"SamAccountName" = ""
"DisplayName" = ""
"EmployeeID" = ""
"LastLogonDate" = ""
"WhenCreated" = ""
"Status" = ""
}
Foreach ($User in $Users)
{
$Record."DisplayName" = $User.DisplayName
$Record."SamAccountNAme" = $User.SamAccountName
$Record."EmployeeID" = $User.EmployeeID
$Record."LastLogonDate" = $User.LastLogonDate
$Record."WhenCreated" = $User.WhenCreated
$Record."Status" = $User.Enabled
$objRecord = New-Object PSObject -property $Record
$Table += $objrecord
} $Table | Export-Csv D:\Grupos\Security_Users.csv -notypeinformationQuedo a espera de su valioso apoyo
Saludos
JC Suarez
Respuestas
-
Hola de nuevo,
El problema lo tienes con el parámetro -Append del Export-CSV, no funciona con versiones de Powershell anteriores a la 3.0. Por comentarios tuyos anteriores creía que -nti haría lo mismo, pero no tengo un 2.0 para probarlo y parece ser que no es así.
Vamos a probar de otra forma, en lugar de agregar cada registro al CSV lo acumulamos en una variable para después exportarlo todo "de una vez":
Clear-Host $Error.Clear() #Ruta del fichero CSV a generar $CSV = "C:\Temp\AD.csv" If (Test-Path $CSV) { Remove-Item $CSV } Try { # Obtengo el DN $Export = New-Object System.Collections.ArrayList $DNSearch = $null; $DN = $null; $MemberOf = $null; $DNSearch = New-Object System.DirectoryServices.DirectorySearcher([ADSI]'') $DNSearch.filter = "(&(objectClass=user)(objectCategory=person))" $Users = $DNSearch.FindAll() ForEach ($User in $Users) { #Obtengo las propiedades $DN = $User.GetDirectoryEntry().DistinguishedName [string]$UserName = $User.Properties.samaccountname [string]$DisplayName = $User.Properties.displayname $MemberOf = ([ADSI]"LDAP://$DN").MemberOf [string]$EmployeID = $User.GetDirectoryEntry().employeeid $LastLogonTimeStamp = $User.get_Properties().lastlogontimestamp [datetime]$LastLogonDate = [datetime]::FromFileTime("$LastLogonTimeStamp") $WhenCreated = Get-Date ($User.GetDirectoryEntry().whencreated).toString() -Format "dd/MM/yyyy HH:mm:ss" If (($User.Properties.useraccountcontrol[0] -band 2) -eq 0) { $Enabled = "Enabled" } Else { $Enabled = "Disabled" } ForEach ($Group in $MemberOF) { $GroupName = $null; $GroupName = $Group.Split(",") $GroupName = ($GroupName[0]).replace("CN=","") $Object = New-Object PSObject -Property @{ SamAccountName = $UserName; DisplayName = $DisplayName; EmployeeID = $EmployeID; LastLogonDate = $LastLogonDate; WhenCreated = $WhenCreated; Enabled = $Enabled; MemberOF = $GroupName; } #Acumulamos los resultados en un ArrayList $Export.add($Object) | Out-Null #Exportamos el ArrayList a CSV $Export | Export-Csv -Path $CSV -NoTypeInformation } } Catch { Write-Error $Error[0].Exception.Message }
Ahora el Export-CSV ya no lleva parámetro para agregar, así que espero que te funcione sin problemas, pero como decía, no dispongo de un Powershell 2.0 para probarlo y ver si en tu sistema funcionará correctamente.
Un saludo.
Diego
- Propuesto como respuesta Diego Fernández Fernández miércoles, 9 de noviembre de 2016 11:55
- Marcado como respuesta JC Suarez miércoles, 9 de noviembre de 2016 11:59
Todas las respuestas
-
Hola JC Suarez,
Este script es para obtener a que grupo/s pertenece un usuarios, fíjate si lo podes adaptar al tullo.
$strUserName = "Potenza" $strUser = get-qaduser -SamAccountName $strUserName $strUser.memberof
Luis Cerutti
Potenza
@luiscerurca
- Editado Luis Cerutti sábado, 29 de octubre de 2016 14:27
-
Hola,
Prueba con este:
Clear-Host $Error.Clear() #Ruta del fichero CSV a generar $CSV = "C:\Temp\AD.csv" If (Test-Path $CSV) { Remove-Item $CSV } Try { # Obtengo el DN $DNSearch = $null; $DN = $null; $MemberOf = $null; $DNSearch = New-Object System.DirectoryServices.DirectorySearcher([ADSI]'') $DNSearch.filter = "(&(objectClass=user)(objectCategory=person))" $Users = $DNSearch.FindAll() # ForEach ($User in $Users) { #Obtengo las propiedades $DN = $User.GetDirectoryEntry().DistinguishedName [string]$UserName = $User.Properties.samaccountname [string]$DisplayName = $User.Properties.displayname $MemberOf = ([ADSI]"LDAP://$DN").MemberOf [string]$EmployeID = $User.GetDirectoryEntry().employeeid $LastLogonTimeStamp = $User.get_Properties().lastlogontimestamp [datetime]$LastLogonDate = [datetime]::FromFileTime("$LastLogonTimeStamp") $WhenCreated = Get-Date ($User.GetDirectoryEntry().whencreated).toString() -Format "dd/MM/yyyy HH:mm:ss" If (($User.Properties.useraccountcontrol[0] -band 2) -eq 0) { $Enabled = "Enabled" } Else { $Enabled = "Disabled" } ForEach ($Group in $MemberOF) { $GroupName = $null; $GroupName = $Group.Split(",") $GroupName = ($GroupName[0]).replace("CN=","") New-Object PSObject -Property @{ SamAccountName = $UserName; DisplayName = $DisplayName; EmployeeID = $EmployeID; LastLogonDate = $LastLogonDate; WhenCreated = $WhenCreated; Enabled = $Enabled; MemberOF = $GroupName; } | Export-Csv -Path $CSV -NoTypeInformation -Append #Creo recordar que por versión de Powershell tenías que cambiar el -Append por -nti } } } Catch { Write-Error $Error[0].Exception.Message }
Espero que te sirva.
Un saludo,
Diego
- Editado Diego Fernández Fernández lunes, 31 de octubre de 2016 11:54
-
Hola Diego, muchas gracias es exactamente lo que se necesita, eres bueno, pero tengo que disculparme porque tengo un detalle al respecto;
1.- El corre sin problemas, pero en el archivo solo exporta 1 registro (el ultimo usuario), pareciere que el bucle no incrementa sino reemplaza.
2.- Al comentar la linea "#| Export-Csv -Path "D:\Grupos\Security_ADUser.csv" -nti" y lo muestra en la pantalla puedo ver que es lo que he estado buscando por tanto tiempo, pero no logro meterlo en un archivo
Sin mas y agradeciendo grandemente tus buenos oficios
Saludos
JC Suarez
-
Hola de nuevo,
El problema lo tienes con el parámetro -Append del Export-CSV, no funciona con versiones de Powershell anteriores a la 3.0. Por comentarios tuyos anteriores creía que -nti haría lo mismo, pero no tengo un 2.0 para probarlo y parece ser que no es así.
Vamos a probar de otra forma, en lugar de agregar cada registro al CSV lo acumulamos en una variable para después exportarlo todo "de una vez":
Clear-Host $Error.Clear() #Ruta del fichero CSV a generar $CSV = "C:\Temp\AD.csv" If (Test-Path $CSV) { Remove-Item $CSV } Try { # Obtengo el DN $Export = New-Object System.Collections.ArrayList $DNSearch = $null; $DN = $null; $MemberOf = $null; $DNSearch = New-Object System.DirectoryServices.DirectorySearcher([ADSI]'') $DNSearch.filter = "(&(objectClass=user)(objectCategory=person))" $Users = $DNSearch.FindAll() ForEach ($User in $Users) { #Obtengo las propiedades $DN = $User.GetDirectoryEntry().DistinguishedName [string]$UserName = $User.Properties.samaccountname [string]$DisplayName = $User.Properties.displayname $MemberOf = ([ADSI]"LDAP://$DN").MemberOf [string]$EmployeID = $User.GetDirectoryEntry().employeeid $LastLogonTimeStamp = $User.get_Properties().lastlogontimestamp [datetime]$LastLogonDate = [datetime]::FromFileTime("$LastLogonTimeStamp") $WhenCreated = Get-Date ($User.GetDirectoryEntry().whencreated).toString() -Format "dd/MM/yyyy HH:mm:ss" If (($User.Properties.useraccountcontrol[0] -band 2) -eq 0) { $Enabled = "Enabled" } Else { $Enabled = "Disabled" } ForEach ($Group in $MemberOF) { $GroupName = $null; $GroupName = $Group.Split(",") $GroupName = ($GroupName[0]).replace("CN=","") $Object = New-Object PSObject -Property @{ SamAccountName = $UserName; DisplayName = $DisplayName; EmployeeID = $EmployeID; LastLogonDate = $LastLogonDate; WhenCreated = $WhenCreated; Enabled = $Enabled; MemberOF = $GroupName; } #Acumulamos los resultados en un ArrayList $Export.add($Object) | Out-Null #Exportamos el ArrayList a CSV $Export | Export-Csv -Path $CSV -NoTypeInformation } } Catch { Write-Error $Error[0].Exception.Message }
Ahora el Export-CSV ya no lleva parámetro para agregar, así que espero que te funcione sin problemas, pero como decía, no dispongo de un Powershell 2.0 para probarlo y ver si en tu sistema funcionará correctamente.
Un saludo.
Diego
- Propuesto como respuesta Diego Fernández Fernández miércoles, 9 de noviembre de 2016 11:55
- Marcado como respuesta JC Suarez miércoles, 9 de noviembre de 2016 11:59
-