itallrounder
Goto Top

Powershell Get All AD Groups with Membership

Guten Morgen in die Runde,

ich stehe aktuell vor der Aufgabe das lokale Active Directory aufzuräumen und zu dokumentieren.

Die Betroffenen Sicherheitsgruppen sind alle zu finden unter:
domain.local -> Firmenname Standort -> Gruppen
In der OU Gruppen sind dann weitere verschachtelte OUs mit den Sicherheitsgruppen.

Wenn ich bisher die Mitglieder einer Sicherheitsgruppe haben wollte, bin ich wie folgt vorgegangen:

Eine Sicherheitsgruppe mit Mitgliedern exportieren:
Get-ADGroupMember -Identity "MeineSicherheitsgruppe" | select name | Export-CSV -path C:\scripts\groups\MeineSicherheitsgruppe.csv -NoTypeInformation -Encoding UTF8 -Delimiter ";"  


Nun muss ich das ganze aber für etwas ~400 Sicherheitsgruppen und Verteilerlisten machen....da reichen meine Powershell Kenntnisse leider nicht.
Deswegen brauche ich Rat von den Profis.

Wie folgt soll der Ablauf sein:

Script 1:
Export Jeder Sicherheitsgruppe / Verteilerliste mit Mitglieder in eine eigene CSV Datei.
Aufbau der CSV:
Gruppename,Mitglieder, Beschreibung der Gruppe, Typ, OU Pfad

Script 2:
Export aller Sicherheitsgruppen / Verteilerliste mit Mitgliedern in eine globale CSV Datei.
Aufbau der CSV:
Gruppename,Mitglieder, Beschreibung der Gruppe, Typ, OU Pfad



Auflisten der AD Gruppen
Get-ADGroup -filter * -searchbase "OU=Meine Unternehmensgruppe,OU=Gruppen,DC=domain,dc=local"  

Wie packe ich das nun am besten in ein Script?
Exportiere ich mir erst einmal alle Gruppen in eine CSV und arbeite damit weiter oder packe das direkt in eine Schleife?

Ich bedanke mich ganz herzlich für Hilfestellungen.

Content-ID: 566144

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

Ausgedruckt am: 25.11.2024 um 01:11 Uhr

ITAllrounder
ITAllrounder 20.04.2020 um 09:02:29 Uhr
Goto Top
Habe nun ein passenden Script im Netz gefunden und etwas abgewandelt.

Leider fehlt mir nun in der CSV Datei noch die Spalte "OU Pfad", wie kriege ich den da noch mit rein?

Anbei das Script:

#// Start of script Export AD Groups with Membership
#// Get Dte for File
$DateTime = Get-Date -f "yyyy-MM"   
 
#// Define CSV Filename
$CSVFile = "C:\scripts\groups\AD_Groups"+$DateTime+".csv"   
 
#// Create emy array for CSV data 
$CSVOutput = @() 
 
#// Get all AD groups in the domain 
$ADGroups = Get-ADGroup -Filter * -Properties description
 
#// Set progress bar variables 
$i=0 
$tot = $ADGroups.count 
 
foreach ($ADGroup in $ADGroups) { 
    #// Set up progress bar 
    $i++ 
    $status = "{0:N0}" -f ($i / $tot * 100)   
    Write-Progress -Activity "Exporting AD Groups" -status "Processing Group $i of $tot : $status% Completed" -PercentComplete ($i / $tot * 100)   
 
    #// Ensure Members variable is empty 
    $Members = ""   
 
    #// Get group members which are also groups and add to string 
    $MembersArr = Get-ADGroup -filter {Name -eq $ADGroup.Name} | Get-ADGroupMember |  select Name 
    if ($MembersArr) { 
        foreach ($Member in $MembersArr) { 
            $Members = $Members + "," + $Member.Name   
        } 
        $Members = $Members.Substring(1,($Members.Length) -1) 
    } 
 
    #// Set up hash table and add values 
    $HashTab = $NULL 
    $HashTab = [ordered]@{ 
        "Name" = $ADGroup.Name   
        "Category" = $ADGroup.GroupCategory   
        "Scope" = $ADGroup.GroupScope   
        "Members" = $Members  
        "Beschreibung" = $ADGroup.description  
    } 
 
    #// Add hash table to CSV data array 
    $CSVOutput += New-Object PSObject -Property $HashTab 
} 
 
#// Export to CSV files 
$CSVOutput | Sort-Object Name | Export-Csv $CSVFile -NoTypeInformation -Encoding UTF8
 
#// End of script
SlainteMhath
SlainteMhath 20.04.2020 um 09:02:53 Uhr
Goto Top
Moin,

direkt in eine Schleife

Get-AdGroup .... | %{
    Get-ADGroupMember %_.Name | select ....
    ...
}

Das gewünschten Felder+Zeilen dann in ein PoSH Object packen und per Export-CSV exportieren

lg,
Slainte
SlainteMhath
Lösung SlainteMhath 20.04.2020 um 09:07:20 Uhr
Goto Top
Leider fehlt mir nun in der CSV Datei noch die Spalte "OU Pfad", wie kriege ich den da noch mit rein?

Nach Zeile 43:
"OU Pfad" = $ADGroup.DistinguishedName