none
AD Share NTFS Berechtigungen ausgeben lassen RRS feed

  • Frage

  • Hallo zusammen, ich habe eine Frage bzgl. Share Berechtigungen auslesen und in CSV Datei speichern.

    Folgendes Skript ist aktuell im Einsatz:

    $folders = gci \\def-svr2\e$ | ?{$_.PSIsContainer}
    foreach ($folder in $folders) {
                $accessrules = @()
    
                $acl = Get-Acl $folder.FullName
                $acl.GetAccessRules($true,$IncludeInheritedRights,[System.Security.Principal.NTAccount]) | %{
                $accessrules += New-Object PSObject -Property @{
                        "Folder" = $folder.FullName
    		    "Rights" = $_.FileSystemRights
                        "Account" = $_.IdentityReference
                        "Member" = (Get-ADGroupmember $_.IdentityReference.toString().split('\')[1]  | select-expandproperty Name) -join ", "
    			 }
    
    
    return $accessrules  | sort Folder,Account | select Folder, Rights, Account, Member  | export-csv "C:\$folder.csv" -NoType -Delimiter ";" -Encoding UTF8
    
    }
    %{$accessrules = $null}
    }


    Auf Share1 hat zB. die Gruppe "Muster" mit dem Mitgliedern Max und Maria Mustermann write Berechtigungen. Ich frage den Share ab, erhalte die Gruppe und dadurch dann die Gruppenmitglieder (aktuell in einer Spalte, durch Komma getrennt. 

    Folder Rights Group Member
    Share1 write Muster MusterMax, MusterMar


    Nun soll das Ganze allerdings erweitert bzw. modifiziert werden.

    Es ist eine CSV Datei für jeden Share gedacht mit folgendem Aufbau:

    Folder Rights Member DisplayName Department
    Share1 write MusterMax Mustermann, Max 111000
    Share1 write MusterMar Mustermann, Maria 111001



    Meine Frage:
    Ist ein solcher Aufbau überhaupt möglich? Ich erhalte die Member ja nicht direkt und einzeln, sondern durch eine Get-ADGroupmember Abfrage der jeweiligen Gruppe, die Berechtigungen auf dem Share besitzt.
    dh. ist es machbar, dass man die Auflistung der Gruppenmitglieder nicht in einer Spalte, sondern in mehreren Zeilen erreichen kann? Wenn ja, dann ist es auch bestimmt möglich für die einzelnen Mitglieder die DisplayNames sowie deren Department anzeigen zu lassen.


    Ich hoffe ihr versteht meine Frage und könnt mir diesbezüglich helfen.
    Einen schönen Start in die Woche und viele Dank schon mal für die Hilfe

    Viele Grüße

    Montag, 10. August 2015 14:05

Antworten

  • Hallo!

    Ah sehr gut.

    Schau dir mal das Konstrukt an:

    $UserData = Get-ADUser $name -property DisplayName, Department | Select displayname,Department 

             $accessrules += New-Object PSObject -Property @{
                        "Folder" = $folder.FullName
       "Rights" = $_.FileSystemRights
                        "Account" = $_.IdentityReference
                        "Member" = $name
    "DisplayName" = ($UserData.DisplayName)
    "Department" = ($UserData.Department)

    }

    So oder so ähnlich sollte es klappen. 

    LG David 

    • Als Antwort markiert wachna87 Donnerstag, 13. August 2015 15:01
    Dienstag, 11. August 2015 18:52

Alle Antworten

  • Hallo,



    ich habs bestimmt nicht 100%ig geschnallt, aber versuche mal mein Glück:

    $folders = gci \\def-svr2\e$ | ?{$_.PSIsContainer}
    foreach ($folder in $folders) {
                $accessrules = @()
    
                $acl = Get-Acl $folder.FullName
                $acl.GetAccessRules($true,$IncludeInheritedRights,[System.Security.Principal.NTAccount]) | %{
                $Names=$_.IdentityReference.toString().split('\')[1]  | select-expandproperty Name
                foreach($name in $Names){
                $accessrules += New-Object PSObject -Property @{
                        "Folder" = $folder.FullName
    		            "Rights" = $_.FileSystemRights
                        "Account" = $_.IdentityReference
                        "Member" = Get-ADGroupmember($name)
    			 }
    }
    
    
    return $accessrules  | sort Folder,Account | select Folder, Rights, Account, Member  | export-csv "C:\$folder.csv" -NoType -Delimiter ";" -Encoding UTF8
    
    }
    %{$accessrules = $null}
    }
    
    LG Dave

    Montag, 10. August 2015 19:06
  • Erstmal danke für die Hilfe.

    Es geht in die richtige Richtung. Dein Skript habe ich müssen etwas abändern, aber jetzt zeigt er mir schon einmal die Mitglieder in einzelnen Zeilen an.

    $folders = gci \\def-svr2\e$ | ?{$_.PSIsContainer}
    foreach ($folder in $folders) {
                $accessrules = @()
    
                $acl = Get-Acl $folder.FullName
                $acl.GetAccessRules($true,$IncludeInheritedRights,[System.Security.Principal.NTAccount]) | %{
                $Names= Get-ADGroupmember $_.IdentityReference.toString().split('\') [1]  | select-expand Name
                foreach($name in $Names){
                $accessrules += New-Object PSObject -Property @{
                        "Folder" = $folder.FullName
    		            "Rights" = $_.FileSystemRights
                        "Account" = $_.IdentityReference
                        "Member" = $name
    			 }
    }
    
    
    return $accessrules  | sort Folder,Account | select Folder, Rights, Account, Member  | export-csv "C:\$folder.csv" -NoType -Delimiter ";" -Encoding UTF8
    
    }
    %{$accessrules = $null}
    }

    Jetzt fehlt nur noch die jeweilige Anzeige des Displaynames und des Departments in jeder Zeile.

    Danke für die weitere Hilfe im Voraus :)


    • Bearbeitet wachna87 Dienstag, 11. August 2015 11:38
    Dienstag, 11. August 2015 08:00
  • Hallo!

    Ah sehr gut.

    Schau dir mal das Konstrukt an:

    $UserData = Get-ADUser $name -property DisplayName, Department | Select displayname,Department 

             $accessrules += New-Object PSObject -Property @{
                        "Folder" = $folder.FullName
       "Rights" = $_.FileSystemRights
                        "Account" = $_.IdentityReference
                        "Member" = $name
    "DisplayName" = ($UserData.DisplayName)
    "Department" = ($UserData.Department)

    }

    So oder so ähnlich sollte es klappen. 

    LG David 

    • Als Antwort markiert wachna87 Donnerstag, 13. August 2015 15:01
    Dienstag, 11. August 2015 18:52
  • Hi und danke für die Hilfe.

    Musste noch ein bisschen dran schrauben und drehen, aber dann hats gepasst.

    Danke für die schnellen und hilfreichen Antworten

    Liebe Grüße

    Michael

    $folders = gci \\def-svr2\e$ | ?{$_.PSIsContainer} foreach ($folder in $folders) { $accessrules = @() $acl = Get-Acl $folder.FullName -ea SilentlyContinue $acl.GetAccessRules($true,$IncludeInheritedRights,[System.Security.Principal.NTAccount]) | %{ $names = Get-ADGroupmember $_.IdentityReference.toString().split('\')[1] -re | select -expand Samaccountname foreach($name in $names) { try{ $UserData = Get-ADUser $name -properties Displayname, Department | select Displayname, Department $accessrules += New-Object PSObject -Property @{ "Folder" = $folder.FullName "Rights" = $_.FileSystemRights "Account" = $_.IdentityReference "Member" = $name "Displayname" = ($UserData.DisplayName) "Department" = ($UserData.Department) } #Ende Object }Catch {"$name ist kein User"} } #Ende Schleife $names return $accessrules | sort Folder,Account | select Folder, Rights, Account, Member, Displayname, Department | export-csv "C:\$folder.csv" -NoType -Delimiter ";" -Encoding UTF8 } }

    • Bearbeitet wachna87 Donnerstag, 13. August 2015 15:02
    Donnerstag, 13. August 2015 15:01