Hallo,
und noch ein Skript. Mit dem nachfolgenden Skript werden von allen Gruppenrichtlinienonjekten die Gruppen oder Benutzer ausgegeben, auf welche die GPO angewendet bzw. gefiltert wird (siehe Screenshot) .
Ausgabe ist eine kommaseparierte Textdatei.
Aufruf:
GPOPermAsCSV.ps1
–> Ausgabe erfolgt nach C:\Temp\GPOPerm.csv
mit Parameter eigener Filename möglich:
GPOPermAsCSV.ps1 -Outputfile C:\temp\GPOfilteredGroups.csv
Skript: GPOPermAsCSV.ps1
#Beim Aufruf den Pfad für Output abfragen, Standard ist C:\Temp\GPOPerm.csv param ( [Parameter(HelpMessage='Bitte Pfad und Dateiname für Output angeben (z. B. C:\Ordner1\Datei1.csv)')] $Outputfile = 'C:\Temp\GPOPerm.csv' ) #Prüfen ob Datei bereits vorhanden, wenn ja, dann löschen if ((Test-Path $Outputfile) -eq $true) {del $Outputfile} #Variablen initialisieren $i=0 $a=0 $GPOs = @() $GPOs += 'Name' $output =@() $outputneu = @() #Alle GPOs mit deren Eigenschaften auslesen $AllGPOs = Get-GPO -All #Anzahl GPOs messen $GPOcount = $AllGPOs.Count #GPO-Namen in Variable $GPOs schreiben for ($a; $a -le $GPOcount; $a++) {$GPOs += ,$AllGPOs[$a].DisplayName} #Da $GPOs[0] den Wert 'Name' hat, ab 1 beginnen $a = 1 #Spaltenüberschrift schreiben $Spaltenüberschrift = "GPO-Name,AD-Objekt,Berechtigung,vererbt" $Spaltenüberschrift >> $Outputfile #Für jede GPO die Permissions auslesen for ($a; $a -le $GPOcount; $a++) { $output = Get-GPPermissions -All -Name $GPOs[$a] $Anzahl = $output.Count for ($i; $i -le $Anzahl; $i++) { #und wenn das GpoApply (Gruppenrichtlinien anwenden) auftaucht, die berechtigte(n) Gruppe(n) rausschreiben if ($output.Permission[$i] -eq "GpoApply") { #Zuweisen der einzelnen Werte in eigene Variablen um am Ende einen String zu erhalten $GPOName = $GPOs[$a] $ADObject = $output.Trustee[$i].Name $Permission = $output.Permission[$i] $vererbt = $output.Inherited[$i] $GPORight = [string]::Join(",", $GPOName, $ADObject, $Permission, $vererbt) $GPORight >> $Outputfile } } $i = 0 } Write-Host "Done"
Viel Spaß!