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ß!
