none
Ad User Auflistung RRS feed

  • Frage

  • Hi Hi,

    also ich komm mal wieder zu diesem Thema zurück. Ich hab noch einmal ausprobiert aber ich bekomme es einfach nicht hin.

    Ich brauch eine Tabelle wo Der Username LastLogon und die Gruppenmitgliedschaften des Users in einer Tabelle stehen.

    Username und LastLogon sind ja gar kein Problem. Hätte ich so gemacht:

    Get-ADUser -filter 'name -like "XXXXXX"' -Properties * | ft Name, LastLogonDate

    Ergebnis:

    Name                                                              LastLogonDate                                                    
    ----                                                              -------------                                                    
    XXXXXXXXXX                                                      22.01.2017 07:05:48

    Ich weis auch wie ich mir die Gruppen des Users anschauen kann:

    Get-ADUser -filter 'name -like "XXXXXXX"' -Properties * | ForEach-Object { Get-ADPrincipalGroupMembership $_ | Select-Object SamAccountName } |  Format-table SamAccountName

    Ergebnis:

    Es kommt eine Tabelle mit dem Header SamAccountName und den entsprechenden Gruppen untereinander.

    SamAccountName                                                                                                                     
    --------------                                                                                                                     
    Domänen-Admins                                                                                                                     
    Schema-Admins                                                                                                                      
    Organisations-Admins                                                                                                               
    Domänen-Benutzer       

    Jetzt bräuchte ich nur eine Tabelle die mir beide Ergebnisse in einer Tabelle anzeigt. Könnt ihr helfen ?

    Donnerstag, 26. Januar 2017 09:38

Antworten

  • Hallo,

    so ich habe jetzt das Script dass das Excel Modell von oben erzeugt auf die schnelle zusammengestutzt und deinen Bedürfnissen angepasst. Du musst dann nur noch das LastlogOnDate hinzufuegen.

    Es liest eine CSV-Datei mit folgendem Inhalt ein

    SamAccountName, Name
    UsrA, User A
    UsrB, User B

    usw. ein, ermittelt für die die Gruppen und gibt sie os aus wie du es gerne hättest.

    param (
    	[Parameter(
    		Mandatory=$true
    	)]
    	[ValidateScript({Test-Path $_})]
    	[String]$Path
    )
    
    $Users = Import-Csv $Path
    $UsersMemberOf = New-Object System.Collections.ArrayList
    foreach ($User in $Users) {
    	try {
    		$MemberOf = Get-ADUser -Identity $User.SamAccountName -properties MemberOf -ErrorAction Stop | Select-Object -ExpandProperty MemberOf | Sort-Object | ForEach-Object {
    			$_.Split(',')[0].Replace('CN=','')
    		}
    	}
    	catch {
    		Write-Warning "Infos fuer [$($User.Name) / $($User.SamAccountName)] konnten nicht ermittelt werden! Bitte Angaben fuer dieses Konto ueberpruefen!"
    		Continue
    	}	
    	$UsersMemberObject = New-Object PSObject
    	Add-Member -InputObject $UsersMemberObject -MemberType 'NoteProperty' -Name Name -Value "$($User.Name)"
    	Add-Member -InputObject $UsersMemberObject -MemberType 'NoteProperty' -Name SamAccountName -Value "$($User.SamAccountName)"
    	Add-Member -InputObject $UsersMemberObject -MemberType 'NoteProperty' -Name MemberOf -Value $MemberOf
    	$Null = $UsersMemberof.Add($UsersMemberObject)
    }
    $Excel = New-Object -ComObject Excel.Application
    $Excel.Visible = $true
    $WorkBook = $Excel.Workbooks.add()
    $Sheet = $WorkBook.WorkSheets.Item(1)
    $Sheet.Cells.Item(1,1) = 'Name'
    $Sheet.Cells.Item(1,2) = 'SamAccountName'
    $L = 2
    foreach ($User in $UsersMemberOf) {
    	$Sheet.Cells.Item($L,1) = "$($User.Name)"
    	$Sheet.Cells.Item($L,2) = "$($User.SamAccountName)"
    	foreach ($Group in $User.MemberOf) {
    		$Sheet.Cells.Item($L,3) = "$Group"
    		$L++
    	}
    }
    $ReSize = $Sheet.UsedRange
    $Null = $ReSize.EntireColumn.AutoFit()
    $Null = $Sheet.Range("C2").Select()
    $Sheet.Application.ActiveWindow.FreezePanes = $true



    Man kann da noch optimieren, aber wie gesagt ich habe das jetzt schnell zusammen gebastelt.

    Beste Gruesse
    brima

     habe noch 4 Zeilen überflüssigen Code entfernt

    Donnerstag, 26. Januar 2017 15:58

Alle Antworten

  • Die Gruppenmitgliedschaften kannst Du mit der Eigenschaft "MemberOf" direkt mit Get-ADUser ermitteln. Oder Du kannst beide Abfragen mittels einer "berechneten Property" verbinden.

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''



    • Bearbeitet BOfH-666 Donnerstag, 26. Januar 2017 09:54
    Donnerstag, 26. Januar 2017 09:53
  • Hi ,

    ja das stimmt memberof hab ich schon versucht bekomme es aber leider in der tabelle dann nicht richtig angezeigt.

    so hätte ich es gerne angezeigt:

    Name LastLogonDate Gruppenname
    Person1 Datum Gruppe1



    Person2 Datum Gruppe1


    • Bearbeitet HorterS Donnerstag, 26. Januar 2017 10:02 änderung
    Donnerstag, 26. Januar 2017 10:00
  • hmmmm ... 
    Get-ADUser  -filter 'name -like "XXXXXX"' -Properties LastLogonDate,MemberOf | Format-Table -Property Name,LastLogonDate,MemberOf -AutoSize
    genügt Dir also nicht?

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 26. Januar 2017 10:08
  • Sieht zwar auch nicht schön aus, aber vielleicht gefällt's Dir ja so:
    Get-ADUser  -filter "name -like 'XXX'" -Properties LastLogonDate,MemberOf | Format-Table -Property Name,LastLogonDate,@{Name='Mitgliedschaften';Expression={($_.MemberOf | ForEach-Object {(Get-ADGroup -Identity $_).Name}) -join ',' }} -AutoSize -Wrap


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 26. Januar 2017 10:16
  • Hi,

    vielen Dank für die schnelle Reaktion. Aber leider gefällt mir das beides noch nicht so ganz. Es ist eben einfach das Problem wenn ich die Tabelle mache wollen meine Kollegen genau in der Spalte memberof filtern können.

    Sprich ich bräuchte die Mitgliedschaften schon einzeln augedröselt.

    Donnerstag, 26. Januar 2017 10:37
  • ???  Wie filtern? Wonach denn filtern?

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 26. Januar 2017 10:39
  • ich würde diese Tabelle erstellen und die Kollegen wollen dann in Excel nach der Gruppenmitgliedschaft filter um rauszufinden wer zum beispiel in der gruppe x ist und wer in der gruppe y ist usw.

    Diese User haben keinen Powershell Zugriff und Berechtigung im AD.

    Donnerstag, 26. Januar 2017 10:42
  • Hmmm ... aber dann musst Du ja eher die AD-Gruppen auslesen und nicht die AD-User. 

    Lesenden Zugriff auf's AD hat normalerweise jeder. Also angucken können sich Deine Kollegen die Gruppen auch über die GUI.


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 26. Januar 2017 10:53
  • Hallo,

    ich glaube er will so was.

    Name	LastLogonDate		Gruppe1	Gruppe2	Gruppe3
    ----    -------------		------- ------- -------
    UserA 	22.01.2017 07:05:48		X
    UserB	21.01.2017 08:05:48	X		X
    UserC	22.01.2017 09:25:12		X	X

    Im Prinzip einfach zu machen, du musst alle Gruppen ermitteln in denen die ausgewählten User sind, dann baust Du dir ein CustomObjekt mit Namen, LogonDate und all den Gruppen und erzeugst dann pro User einen Eintrag.

    Dann kann man das ganze auch noch aus der PowerShell raus direkt in Excel aufbereiten ...

    Ich könnte ja jetzt den fix und fertigen Code psten aber hier geht es nicht ums bestellen von Scripten.

    Beste Gruesse
    brima


    • Bearbeitet brima Donnerstag, 26. Januar 2017 12:06
    Donnerstag, 26. Januar 2017 12:02
  • Hallo ist mir schon klar das ich hier kein Script bestelle. Hab ich auch nicht vor. Ich bekomme ja die Infos bereits aus der Powershell raus aber halt nicht zusammen in eine Tabelle.

    Ich ich möchte eigentlich eine Spalte mit Gruppen wo aber für den Benutzer alle Gruppen in der er Mitglied ist angezeigt wird, jedoch ein Gruppenname pro Zelle.

    Und das bekomme ich nicht hin.

    Donnerstag, 26. Januar 2017 13:54

  • Und das bekomme ich nicht hin.

    Poste doch bitte den Teil des Scripts wo Du scheiterst und Du erhälst auch Verbesserungs-/Lösungsvorschläge.


    Freundliche Grüße

    Sandro
    MCSA: Windows Server 2012
    Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)



    Donnerstag, 26. Januar 2017 14:05
  • Hi,

    du willst also sowas?

    Donnerstag, 26. Januar 2017 14:25
  • Hi,

    du willst also sowas?

    Jap genau sowas hätte ich gerne:

    Code für user daten wie name und lastlogon ist ja kein ding

    Get-ADUser -filter 'name -like "XXXXXX"' -Properties * | ft Name, LastLogonDate

    Code für die Gruppen

    Get-ADUser -filter 'name -like "XXXXXXXX"' -Properties * | ForEach-Object { Get-ADPrincipalGroupMembership $_ | Select-Object SamAccountName } |  Format-table SamAccountName

    Nur wie bekomme ich das jetzt zusammen und dann noch in eine Tabelle ?


    Donnerstag, 26. Januar 2017 15:13
  • Nur wie bekomme ich das jetzt zusammen und dann noch in eine Tabelle ?


    Daüfür bietet die PowerShell ab Werk kein CMDLet an, und deshalb musst du an der Stelle Hirnschmalz investieren und programmieren, dabei wird dir hier gerne geholfen, aber es geht nicht darum das man dir hier direkt einer fertige Lösung bringt.

    Für das Zusammenspiel zwischen Excel und PowerShell findest du über eine Suchmaschine deiner Wahl mit Sicherheit Beipsiele, und dann probiertst Du mit den Erkenntnissen deine Tabelle zu befüllen und dabei helfen wir dir gerne.

    Beste Gruesse
    brima

    Donnerstag, 26. Januar 2017 15:35
  • Hallo,

    so ich habe jetzt das Script dass das Excel Modell von oben erzeugt auf die schnelle zusammengestutzt und deinen Bedürfnissen angepasst. Du musst dann nur noch das LastlogOnDate hinzufuegen.

    Es liest eine CSV-Datei mit folgendem Inhalt ein

    SamAccountName, Name
    UsrA, User A
    UsrB, User B

    usw. ein, ermittelt für die die Gruppen und gibt sie os aus wie du es gerne hättest.

    param (
    	[Parameter(
    		Mandatory=$true
    	)]
    	[ValidateScript({Test-Path $_})]
    	[String]$Path
    )
    
    $Users = Import-Csv $Path
    $UsersMemberOf = New-Object System.Collections.ArrayList
    foreach ($User in $Users) {
    	try {
    		$MemberOf = Get-ADUser -Identity $User.SamAccountName -properties MemberOf -ErrorAction Stop | Select-Object -ExpandProperty MemberOf | Sort-Object | ForEach-Object {
    			$_.Split(',')[0].Replace('CN=','')
    		}
    	}
    	catch {
    		Write-Warning "Infos fuer [$($User.Name) / $($User.SamAccountName)] konnten nicht ermittelt werden! Bitte Angaben fuer dieses Konto ueberpruefen!"
    		Continue
    	}	
    	$UsersMemberObject = New-Object PSObject
    	Add-Member -InputObject $UsersMemberObject -MemberType 'NoteProperty' -Name Name -Value "$($User.Name)"
    	Add-Member -InputObject $UsersMemberObject -MemberType 'NoteProperty' -Name SamAccountName -Value "$($User.SamAccountName)"
    	Add-Member -InputObject $UsersMemberObject -MemberType 'NoteProperty' -Name MemberOf -Value $MemberOf
    	$Null = $UsersMemberof.Add($UsersMemberObject)
    }
    $Excel = New-Object -ComObject Excel.Application
    $Excel.Visible = $true
    $WorkBook = $Excel.Workbooks.add()
    $Sheet = $WorkBook.WorkSheets.Item(1)
    $Sheet.Cells.Item(1,1) = 'Name'
    $Sheet.Cells.Item(1,2) = 'SamAccountName'
    $L = 2
    foreach ($User in $UsersMemberOf) {
    	$Sheet.Cells.Item($L,1) = "$($User.Name)"
    	$Sheet.Cells.Item($L,2) = "$($User.SamAccountName)"
    	foreach ($Group in $User.MemberOf) {
    		$Sheet.Cells.Item($L,3) = "$Group"
    		$L++
    	}
    }
    $ReSize = $Sheet.UsedRange
    $Null = $ReSize.EntireColumn.AutoFit()
    $Null = $Sheet.Range("C2").Select()
    $Sheet.Application.ActiveWindow.FreezePanes = $true



    Man kann da noch optimieren, aber wie gesagt ich habe das jetzt schnell zusammen gebastelt.

    Beste Gruesse
    brima

     habe noch 4 Zeilen überflüssigen Code entfernt

    Donnerstag, 26. Januar 2017 15:58