none
Listar propiedades de un Usuario de Active Directory y el grupo al que pertenece RRS feed

  • 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 -notypeinformation

    Quedo a espera de su valioso apoyo

    Saludos


    JC Suarez

    viernes, 28 de octubre de 2016 20:19

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

    jueves, 3 de noviembre de 2016 12:32

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


    sábado, 29 de octubre de 2016 14:26
  • 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


    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

    martes, 1 de noviembre de 2016 13:56
  • 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

    jueves, 3 de noviembre de 2016 12:32
  • Hola Diego, Definitivamente Eres bueno

    muchas gracias era exactamente lo necesitado

    Saludos suerte

    Gracias


    JC Suarez

    miércoles, 9 de noviembre de 2016 11:29