Benutzer mit den meisten Antworten
AD Share NTFS Berechtigungen ausgeben lassen - ERWEITERUNG

Frage
-
Hi zusammen,
Ich nochmal zu diesem Thema:
Diesmal mit Erweiterung des Ganzen. Vielleicht könnt Ihr mir ja nochmal weiterhelfen.
Das Skript durchsucht ja wie bereits erwähnt diverse Shares nach "Berechtigungsgruppen"
Diese Gruppe beinhalten 2 Arten von Members:
- User:
Diese werden durch das Skript richtig ausgegeben, dabei werden der Displayname, das Department sowie die Berechtigungen der Berechtigungsgruppe auf dem Share angezeigt... alles gut soweit
- Abteilungsgruppen:
Hier sind Gruppen in der Berechtigungsgruppe. Auch diese werden durch die aktuelle Variante vom Skript ausgegeben, samt Members und Department ...
Allerdings werden in diesem Fall die Berechtigungen der Berechtigungsgruppe nicht angezeigt!!
$folders = gci \\def-svr1\e$ | ?{$_.PSIsContainer} foreach ($folder in $folders) { $accessrules = @() $acl = Get-Acl $folder.FullName $acl.GetAccessRules($true,$IncludeInheritedRights,[System.Security.Principal.NTAccount]) | %{ try{ $test = Get-ADGroup $_.IdentityReference.toString().split('\')[1] | select -expand Samaccountname $names = Get-ADGroupmember $_.IdentityReference.toString().split('\')[1] | select -expand Samaccountname }Catch {"System ist kein gültiger User"} foreach($name in $names) { if ($_.IdentityReference.toString().split('\')[1] -ne "Administrators"){ if ($_.IdentityReference.toString().split('\')[1] -ne "Administratoren"){ if ($_.IdentityReference.toString().split('\')[1] -ne "SYSTEM"){ try{ $UserData = Get-ADUser $name -properties Displayname, Department | select Displayname, Department $accessrules += New-Object PSObject -Property @{ "Folder" = $folder.FullName "Berechtigungsgruppe" = $test #$_.IdentityReference "Abteilungsgruppe" = $NULL "Member" = $name "Displayname" = ($UserData.DisplayName) "Department" = ($UserData.Department) "Rights" = $_.FileSystemRights } #Ende Object } Catch { try{ $memb = Get-ADGroupmember $name | select -expand Samaccountname }Catch {"System ist kein gültiger User"} foreach($membr in $memb) { if ($_.IdentityReference -ne "Administrators"){ if ($_.IdentityReference -ne "Administratoren"){ if ($_.IdentityReference -ne "SYSTEM"){ $UserData = Get-ADUser $membr -properties Displayname, Department | select Displayname, Department $accessrules += New-Object PSObject -Property @{ "Folder" = $folder.FullName "Berechtigungsgruppe" = $test "Abteilungsgruppe" = $name "Member" = $membr "Displayname" = ($UserData.DisplayName) "Department" = ($UserData.Department) "Rights" = $test.FileSystemRights } #Ende Object }}} } }}}} } #Ende Schleife $names return $accessrules | sort Folder,Account | select Folder, Berechtigungsgruppe, Abteilungsgruppe, Member, Displayname, Department, Rights | export-csv "C:\$folder.csv" -NoType -Delimiter ";" -Encoding UTF8 } }
Jemand eine Idee was geändert werden muss, damit auch bei den Berechtigungsgruppen, die Abteilungsgruppen als Member haben, die Rechte auf den jeweiligen Share ordnungsgemäß angezeigt werden??
Danke im Voraus
Michael
Antworten
-
Hi Michael,
zuerst mal: Du kannst dir ein paar verwirrende if-Schleifen ersparen:
# Alter Eintrag if ($_.IdentityReference.toString().split('\')[1] -ne "Administrators") { # ... } # Stattdessen: if ($_.IdentityReference.toString().split('\')[1] -eq "Administrators") { continue }
In einer foreach ($a in $b) Schleife kannst du mit dem continue-statement den aktuellen Durchlauf beenden und zum nächsten Objekt wechseln.
Gruppenmitglieder bekommen keine Rechte angezeigt, da du bei der Objekterstellung die falsche Variable verwendest: $test statt $_.
Grüße,
FriedrichThere's no place like 127.0.0.1
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 6. Oktober 2015 01:43
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 7. Oktober 2015 12:58
Alle Antworten
-
Vielleicht könnte File System Security PowerShell Module Dir die Arbeit etwas vereinfachen. Dieses Modul wurde aber explizit für die Verwaltung von NTFS Berechtigungen geschrieben. Share und AD Security Descriptors funkionieren nicht.
-Raimund
-
Hi und danke für die Antwort.
Kannst Du mir die Funktionsweise und Verwendung des Tools vllt. etwas genauer erklären?
Gibt es sonst noch Anmerkungen zu meinem Skript, wo man da was umschreiben müsste, damit die Rechte angezeigt werden?
Danke und viele Grüße
-
Die cmdlets, die in dem Module zur Verfügung gestellt werden, sind fast selbsterklärend. Leider habe ich noch nicht die Zeit gehabt, eine Dokumentation zur Verfügung zu stellen.
Hast Du es denn schon mal getestet? Gibt es spezielle Fragen?
-Raimund
-
Hi Michael,
zuerst mal: Du kannst dir ein paar verwirrende if-Schleifen ersparen:
# Alter Eintrag if ($_.IdentityReference.toString().split('\')[1] -ne "Administrators") { # ... } # Stattdessen: if ($_.IdentityReference.toString().split('\')[1] -eq "Administrators") { continue }
In einer foreach ($a in $b) Schleife kannst du mit dem continue-statement den aktuellen Durchlauf beenden und zum nächsten Objekt wechseln.
Gruppenmitglieder bekommen keine Rechte angezeigt, da du bei der Objekterstellung die falsche Variable verwendest: $test statt $_.
Grüße,
FriedrichThere's no place like 127.0.0.1
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 6. Oktober 2015 01:43
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 7. Oktober 2015 12:58