izedra1996
Goto Top

User Gruppen auslesen via Excel ausgeben

Hallo Zusammen,

ein Kunde von uns möchte eine monatliche Auflistung aller User und deren Rechten (Gruppen)
Dies haben wir bis jetzt immer via Hand aktualisiert. Da jedoch monatlich bis zu 30 Änderungen eingehen frisst dies sehr viel Zeit.

Über die Suche habe ich einige funktionierende Skripte gefunden.
Jedoch würden wir gerne mithilfe einer Excel Vorlage eine einheitlich Liste monatlich ausgeben.

Der Grüne Bereich wird durch uns händisch festgelegt sodass wir verschiedenen Skripte für Drucker, Laufwerkszugriffe usw. anlegen können.

Somit sollte das Skript bei ausführen alle Gruppen und deren Member auslesen (somit müsste das Skript die User jedesmal aufs neue auslesen und im gelben bereich eintragen (und bei einem erneuten Start auch löschen) können. Und zu guter letzt in Form eines "ist User in der Gruppe" mit einem X im Blauen bereich eintragen können.

Ist so etwas möglich? Vielleicht auch mit geringen Aufwand sodass ich ein hier im Forum vorhanden Skript nur auf die Excel Ausgabe abändern muss?

Ich denke das dass löschen des Gelben und Blauen Bereichs bei einem erneuten ausführen zu Problemen führen könnte.


Grüße und schonmal danke für eure Mühen,
test bild

Content-Key: 384468

Url: https://administrator.de/contentid/384468

Printed on: April 27, 2024 at 02:04 o'clock

Member: em-pie
em-pie Aug 26, 2018 updated at 07:02:01 (UTC)
Goto Top
Moin,

Ginge wohl mit einem Macro (VBA) in Excel.

Zuerst alle User ermitteln und dann für jeden User die Gruppen abfragen. Ginge sicherlich auch kombiniert:

Z.B.
https://stackoverflow.com/questions/416856/determining-a-users-group-mem ...

Ich weiß nur nicht, welche userrechte zum abfragen des AD benötigt werden

Gruß
em-pie
Member: Izedra1996
Izedra1996 Aug 26, 2018 at 09:45:35 (UTC)
Goto Top
Mit Powershell wäre dies nicht möglich?
Member: colinardo
colinardo Aug 26, 2018, updated at Jun 23, 2023 at 10:32:11 (UTC)
Goto Top
Servus.
Zitat von @Izedra1996:
Mit Powershell wäre dies nicht möglich?
Doch, kein Thema. Scripte dazu findest du zum Thema von mir hier eigentlich schon zu Hauf.
Ich denke das dass löschen des Gelben und Blauen Bereichs bei einem erneuten ausführen zu Problemen führen könnte.
Nö, nicht wirklich, hier hast du alles was du brauchst inkl. Kommentaren für die wichtigsten Zeilen), Kenntnisse in VBA Entwicklung mit Excel sind bei der COM-Automation Pflichtprogramm, ansonsten wirst du wenn du dich selbst daran versuchst verzweifeln, es gilt wie immer: Ohne Fleiß kein Preis!:
# Load AD Module
Import-Module ActiveDirectory
# filepath with data
$file = 'D:\Users.xlsx'  
if(!(Test-Path $file)){
    Write-Error "Excel File '$file' does not exist." -Category ObjectNotFound  
    return
}
write-host "Processing Users, please wait ... " -NoNewline  
# create excel com object (installed excel required)
$objXL = New-Object -Com Excel.Application -EA Stop
# disable dialogs/alerts
$objXL.DisplayAlerts = $false
# open workbook
$wb = $objXL.Workbooks.Open($file)
# data is on sheet 1
$ws = $wb.Sheets.Item(1)
# get range of groups (headers B1:Bx)
$rngGroups = $ws.Range("B1",$ws.Range("B1").End(-4161))  
# Start of output range
$rngOut = $ws.Range("A2")  
# first clear users range
$ws.UsedRange.Offset(1,0).ClearContents() | out-null
# itterate AD Users
Get-ADUser -Filter * | %{
    # write username in column A
    $rngOut.Value() = $_.SamAccountName
    # get users group membership
    $groups = Get-ADPrincipalGroupMembership $_.SamAccountName | select -Expand Name
    # Compare groups in sheet with membership of users and place x in the matching column
    $rngGroups | ?{$_.Value() -in $groups} | %{
        # output cell
        $rngOutCell = $rngOut.Offset(0,$_.Column -1)
        # write x in cell
        $rngOutCell.Value() = "x"  
        # center content of cell horizontal
        $rngOutCell.HorizontalAlignment = -4108
    }
    # move output range one row further
    $rngOut = $rngOut.Offset(1,0)
}
# make Excel visible
$objXL.Visible = $true
# enable dialogs/alerts
$objXL.DisplayAlerts = $true
write-host "Finished." -F Green  
# free com ressources
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objXL) | out-null
Viel Spaß damit. Persönlichen Support dafür gibt's gerne gegen Aufwandsentschädigung per PN.
Grüße Uwe
Mitglied: 137084
137084 Aug 30, 2018 updated at 09:14:45 (UTC)
Goto Top
Danke für das Skript! Lässt sich bestimmt irgendwann mal verwenden.

Gruß Werner