Ordner Berechtigungen auf File Server von einzelnen Benutzern auslesen
Das Problem kennt vermutlich jeder Admin eines File Servers – wenn man nicht ganz akkurat ist und sich immer schön an die Best Practices hält und nur auf Gruppen berechtigt sind früher oder später auf jedem File Server auch Berechtigungen für einzelne Benutzer Accounts zu finden. Diese in den diversen Unterordnern dann zu finden gleicht oftmals der Suche nach der Nadel im Heuhaufen.
Abhilfe schafft hier ein kleines PowerShell Skript. Dieses kann über Parameter gesteuert nach einem bestimmen Benutzer suchen und dessen Berechtigungen auflisten. Als zusätzliche Parameter sind der Startpfad sowie (optional) die Tiefe der Ordnerstruktur anzugeben, welche durchsucht werden soll.
<#
.SYNOPSIS Skript zur Berechtigungsanalyse eines Benutzers
.DESCRIPTION Das Skript gibt basierend auf einem User und dem Startordner alle Unterordner aus, auf denen ein Benutzer Rechte hat
.Parameter StartFolder Der Ordner, ab dem die Auswertung erfolgen soll
.Parameter User Der Benutzername des jeweiligen Benutzers, dessen Rechte abgefragt werden, wahlweise in der Form Domäne\Benutzername oder mit dem UPN
.Parameter MaxFolderLevel Optional, gibt die maximale Tiefe der Rekursion an
#>
param (
[parameter(Mandatory=$true)][string]$StartFolder,
[parameter(Mandatory=$true)][string]$User,
[Parameter()]$MaxFolderLevel
)
if ($MaxFolderLevel) {
$FolderPath = Get-ChildItem -Directory -Path $StartFolder -Recurse -Force -Depth $MaxFolderLevel
} else {
$FolderPath = Get-ChildItem -Directory -Path $StartFolder -Recurse -Force
}
$Output = @()
ForEach ($Folder in $FolderPath) {
$Acl = Get-Acl -Path $Folder.FullName
ForEach ($Access in $Acl.Access) {
if ($Access.IdentityReference -eq $User) {
$Properties = [ordered]@{'Folder Name'=$Folder.FullName;'Group/User'=$Access.IdentityReference;'Permissions'=$Access.FileSystemRights;'Inherited'=$Access.IsInherited}
$Output += New-Object -TypeName PSObject -Property $Properties
}
}
}
$Output | Out-GridView