kilrathi
Goto Top

AD Share NTFS Berechtigungen ausgeben lassen

Hallo Leute,

ich würde mir gerne für eine große Anzahl von Shares die NTFS Berechtigungen ausgeben lassen.
Dabei ist zu beachten, dass für die Shares (ca. 3000) meistens komplette Gruppen die Berechtigungen erhalten.
Ziel ist es hier nicht nur die Gruppe(n) mit Ihrer Berechtigung ausgeben zu lassen, sondern die Mitglieder der jeweiligen Gruppe.

Beispiel:

Share 1 -> GruppeAB -> Schreibrechte
In GruppeAB sind BenutzerA und BenutzerB

Share 1 -> GruppeXY -> Leserechte.
In GruppeXY sind BenutzerA und BenutzerB



Am Ende soll

a) eine Datei mit allen Shares und allen jeweils zugehörigen Gruppen bzw. Mitgliedern der Gruppen und deren Berechtigungen als csv oder xml herauskommen
b) eine Datei für jeden Share mit den jeweils zugehörigen Gruppen bzw. Mitgliedern der Gruppen und dessen Berechtigungen als csv oder xml herauskommen

Ist dies irgendwie möglich?


Ich habe auch schon mit nem Skript angefangen. Hier werden mir alle Shares angezeigt, die AD Objekte die darauf Berechtigungen haben und welche das sind.
Jetzt muss ich nur noch aus den angezeigten Gruppen die jeweiligen Mitglieder rausziehen können.

$pfad = "\\def-svr2\e$"
$partition = Get-ChildItem -Path $pfad

$schleife = foreach($obj in $partition){

Get-Acl $obj.FullName


Get-Acl $obj.FullName |
Select-Object -ExpandProperty Access |

Select-Object @{n="Name";e={ $obj.fullname }},

@{n="AD Objekt";e={ $_.identityreference }},

@{n="Berechtigungen";e={ $_.filesystemrights }}
}


$schleife #| Out-File c:\Komplettliste2.txt


Danke für die Hilfe im Voraus
Kilrathi

Content-ID: 278126

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

Ausgedruckt am: 24.11.2024 um 21:11 Uhr

114757
Lösung 114757 23.07.2015, aktualisiert am 28.07.2015 um 10:38:25 Uhr
Goto Top
Guckst du hier:
Vergebene Rechte dokumentieren - Gibt es hierfür ein anwenderfreundliches Tool?

Für das Auslesen der Mitglieder einer Gruppe gibt's :
Get-AdGroupMember

Gruß jodel32
kilrathi
kilrathi 23.07.2015 um 11:09:30 Uhr
Goto Top
Wow Klasse danke für die schnelle Antwort. Das Skript ist vom Aufbau ähnlich zu meinem Skript... nur viel schöner und schlichter. Und hat dazu noch ne schöne html Seite face-smile
Ein Dank geht an dieser Stelle an den Ersteller face-smile

Jetzt muss ich nur irgendwie die Gruppenmitglieder mit dem entsprechenden Befehl auslesen und in die ganze Geschichte einbauen? Hat da jemand ne Idee?
Kann man das überhaupt zusammen in eins basteln? Oder muss ich mir die Gruppenmitglieder erst im Nachgang an die Berechtigungsabfrage anzeigen lassen?

Gruß
Kilrathi
122990
Lösung 122990 23.07.2015, aktualisiert am 28.07.2015 um 10:38:28 Uhr
Goto Top
Moin,
Geb doch einfach der Variablen accessrules eine neue Spalte und lese dir mit oben bereits genannten Befehl die Gruppenmitglieder aus, den Gruppennamen bekommst du ja dort mit $_.IdentityReference und feddich ist die Kiste

Gruß grexit
kilrathi
kilrathi 23.07.2015 um 13:44:10 Uhr
Goto Top
Meinst du in etwa so?

"Member" = Get-ADGroupMember $_.IdentityReference ???

Da kommt ne Fehlermeldung:

Cannot bind parameter 'Identity'. Cannot convert the "BUILTIN\Administrators" value of type "System.Security.Principal.NTAccount" to type "Microsoft.ActiveDirectory.Management.ADGroup".

Egal ob BUILTIN\Administrators oder DEF\NRW (selbst erstellte Gruppe), es kommt die Fehlermeldung.

Also irgendwie scheint er mir die ganzen Accounts nicht als Gruppen anzunehmen?
114757
114757 23.07.2015 aktualisiert um 13:48:18 Uhr
Goto Top
Naja du musst schon bestimmte Gruppen ausfiltern, oder eben die Accounts zur SID auflösen:
# Username to SID
(New-Object System.Security.Principal.NTAccount("DEINUSERNAME")).Translate([System.Security.Principal.SecurityIdentifier]).Value  
musst dich halt Schritt für Schritt ran arbeiten, hat ja keiner gesagt das es von selbst geht face-smile
kilrathi
kilrathi 23.07.2015 um 14:49:01 Uhr
Goto Top
Das Problem dabei ist, dass es mehrere tausend Gruppen sind... filtern is da nicht. Sind für jeden Share mindestens 2 oder 3 spezifische Gruppen jeweils...

https://social.microsoft.com/Forums/en-US/3df8cca7-db6e-47c3-bf26-888eb9 ...

scheinbar gab es vor 2 Jahren schonmal jemanden, der was vergleichbares basteln wollte.... leider ohne Ergebnis.

Aber das steht auch, dass das Zielskript sehr umständlich sei, da alle Gruppen überprüft werden müssten und je nachdem verschiedene Varianten von Funktionen ablaufen müssen. Ist das richtig oder ist mein Vorhaben doch irgendwie "einfacher" umzusetzen?
122990
122990 24.07.2015 um 10:10:02 Uhr
Goto Top
Du musst nur den Gruppennamen an dem Backslash "splitten" und nur den reinen Gruppennamen verwenden, dann klappt das face-wink
kilrathi
kilrathi 24.07.2015 um 10:34:22 Uhr
Goto Top
Hast Du da vllt. den entsprechenden Befehl bzw. die benötigten Befehle?
Ich weiß was Du meinst, aber z.B. mit -replace(...) wird es ja wohl kaum funktionieren nehme ich an?
122990
Lösung 122990 24.07.2015, aktualisiert am 28.07.2015 um 10:38:34 Uhr
Goto Top
Hast Du da vllt. den entsprechenden Befehl bzw. die benötigten Befehle?
Ich weiß was Du meinst, aber z.B. mit -replace(...) wird es ja wohl kaum funktionieren nehme ich an?
doch das geht auch ,
Variante 1
$_.IdentityReference.toString() -replace '.*?\\(.*)','$1'  
Variante 2
$_.IdentityReference.toString().split('\')[1]  
Variante 3
($_.IdentityReference.toString() -Split '\\')[1]  
Gibt noch mehr ...
Du hast die freie Wahl face-smile
kilrathi
kilrathi 24.07.2015 um 10:52:15 Uhr
Goto Top
Ich habe:

"Member" = Get-ADGroupMember $_.IdentityReference.split('\')[1]

und bekomme als Fehlermeldung:

Method invocation failed because [System.Security.Principal.NTAccount] does not contain a method named 'split'.

Wenn ich die Variante mit Replace nehme, bekomme ich den gleichen Fehler wie bisher face-sad
122990
122990 24.07.2015 aktualisiert um 11:08:33 Uhr
Goto Top
Dann musst du jeweils noch ein toString() dazwischen setzen um das Objekt in einen String umzuwandeln
$_.IdentityReference.toString().split('\')[1]  
Bin leider im Moment auf dem Smartphone, ist oben alles korrigiert, sorry.
kilrathi
kilrathi 24.07.2015 um 11:22:12 Uhr
Goto Top
Wow Klasse das klappt!!! face-smile
Wenn du mir jetzt noch sagst, wie ich es hinbekomme, dass mehrere Gruppenmitglieder in z.B. ner CSV Datei angezeigt werden, dann bist du mein Held der Woche face-smile
Aktuell kommt bei mehreren Mitgliedern: System.Object .... verständlicherweise
122990
122990 24.07.2015 um 11:23:56 Uhr
Goto Top
Noch zur Info:
Enthalten deine Gruppen noch weitere verschachtelten Gruppen, kannst du diese alle mit dem Parameter -recursive auf einen Schlag auflösen lassen :
https://technet.microsoft.com/en-us/library/ee617193.aspx
122990
122990 24.07.2015 um 11:24:58 Uhr
Goto Top
export-csv lautet das Stichwort face-wink
kilrathi
kilrathi 24.07.2015 um 11:57:56 Uhr
Goto Top
ja die csv Datei lass ich mir ja bereits ausgeben. Aber in der Spalte mit den Members steht dann (falls es mehrere Members sind) System.Object ... das meinte ich damit face-smile
122990
122990 24.07.2015 aktualisiert um 12:04:05 Uhr
Goto Top
Du musst die Spalte mit select -Expand erst expandieren bevor du sie ausgeben kannst...
Mann das sind doch Powershell Grundlagen ...

Das hier macht das gewünschte
Get-AdGroupMember $_.IdentityReference.toString().split('\')[1] -recursive | select SamAccountName | export-csv 'C:\datei.csv' -NoType -Delimiter ";" -Encoding UTF8