- Mitglied seit
- 09. Nov 2016
- Beiträge
- 3.987
- Punkte für Reaktionen
- 517
- Punkte
- 174
Hallo!
Ich habe jetzt ein wirklich geniales, funktionsfähiges Script, welches die ACL einer Freigabe oder eines Ordners der Syno ausliest und als xml oder csv Datei speichert.(Auf der Syno läuft übrigens kein AD!)
Einen Fehler gibt es aber noch, der es trotz aller Funktionalität nur eingeschränkt brauchbar macht.
Es wird beim Auslesen der Nutzer immer nur die SID des Nutzers/Gruppe ausgelesen, aber nicht dessen realer Name. Mit der kryptischen SID kann man aber nicht viel anfangen.
Wenn ich unter Windows mit dem Explorer auf einen Ordner/Datei klicke > Eigenschaften > Sicherheit dauert es immer einige Sekunden, bis in der Anzeige der Zugriffsberechtigungen die SID in Realname wechselt.
Damit funktioniert die Darstellung der ACL Nutzernamen unter Windows definitiv.
Auch wenn ich dem Script an der passenden Stelle eine Pause gönne liest es nur die SID aus.
Hat jemand eine Idee, was ich ändern könnte?
Alternativ: Wie kann ich alle SID+Nutzer-/Gruppenname der Syno auslesen? So könnte ich über einen Umweg die ausgelesene SID durch den Realnamen austauschen.
Den entscheidenden Teil zum Auslesen der ACL habe ich hier mal angefügt. Läuft unter der Powershell von Windows.
Danke für euer Feedback.
function List-FolderRights{
param(
[parameter(mandatory=$true)][string]$RootFolder,
[bool]$IncludeInheritedRights = $true
)
$accessrules = @()
$folders = gci $RootFolder -Recurse | ?{$_.PSIsContainer}
foreach($folder in $folders){
try{
$acl = Get-Acl $folder.FullName
$acl.GetAccessRules($true,$IncludeInheritedRights,[System.Security.Principal.NTAccount]) | %{
$accessrules += New-Object PSObject -Property @{
"Folder" = $folder.FullName
"Account" = $_.IdentityReference
"Rights" = $_.FileSystemRights
"AccessControlType" = $_.AccessControlType
"InheritanceFlags" = $_.InheritanceFlags
}
}
}catch{write-host $_.Exception.Message -ForegroundColor Red}
}
return $accessrules
}
$result | export-csv "C:\temp\folderrights.csv" -NoType -Delimiter ";" -Encoding UTF8
Ich habe jetzt ein wirklich geniales, funktionsfähiges Script, welches die ACL einer Freigabe oder eines Ordners der Syno ausliest und als xml oder csv Datei speichert.(Auf der Syno läuft übrigens kein AD!)
Einen Fehler gibt es aber noch, der es trotz aller Funktionalität nur eingeschränkt brauchbar macht.
Es wird beim Auslesen der Nutzer immer nur die SID des Nutzers/Gruppe ausgelesen, aber nicht dessen realer Name. Mit der kryptischen SID kann man aber nicht viel anfangen.
Wenn ich unter Windows mit dem Explorer auf einen Ordner/Datei klicke > Eigenschaften > Sicherheit dauert es immer einige Sekunden, bis in der Anzeige der Zugriffsberechtigungen die SID in Realname wechselt.
Damit funktioniert die Darstellung der ACL Nutzernamen unter Windows definitiv.
Auch wenn ich dem Script an der passenden Stelle eine Pause gönne liest es nur die SID aus.
Hat jemand eine Idee, was ich ändern könnte?
Alternativ: Wie kann ich alle SID+Nutzer-/Gruppenname der Syno auslesen? So könnte ich über einen Umweg die ausgelesene SID durch den Realnamen austauschen.
Den entscheidenden Teil zum Auslesen der ACL habe ich hier mal angefügt. Läuft unter der Powershell von Windows.
Danke für euer Feedback.
function List-FolderRights{
param(
[parameter(mandatory=$true)][string]$RootFolder,
[bool]$IncludeInheritedRights = $true
)
$accessrules = @()
$folders = gci $RootFolder -Recurse | ?{$_.PSIsContainer}
foreach($folder in $folders){
try{
$acl = Get-Acl $folder.FullName
$acl.GetAccessRules($true,$IncludeInheritedRights,[System.Security.Principal.NTAccount]) | %{
$accessrules += New-Object PSObject -Property @{
"Folder" = $folder.FullName
"Account" = $_.IdentityReference
"Rights" = $_.FileSystemRights
"AccessControlType" = $_.AccessControlType
"InheritanceFlags" = $_.InheritanceFlags
}
}
}catch{write-host $_.Exception.Message -ForegroundColor Red}
}
return $accessrules
}
$result | export-csv "C:\temp\folderrights.csv" -NoType -Delimiter ";" -Encoding UTF8
Zuletzt bearbeitet: