Code-Beispiel
Autor: Dr. Holger Schwichtenberg
Beschreibung
Möchte man die einzelnen Rechteeinträge eines Systembausteins genauer betrachten, dann sollte man selbst über die Rechteliste iterieren. Die von Access bzw. GetAccessRules() gelieferte Liste des Typs AuthorizationRuleCollection enthält im Falle des Dateisystems Objekte vom Typ FileSystemAccessRule. Diese Objekte enthalten wiederum folgende Attribute:- IdentityReference: Subjekt (Benutzer oder Gruppe), das Rechte hat
- FileSystemRights: Rechte
- AccessControlType: Rechteart (erlaubt oder verboten)
- IsInherited: zeigt an, ob die Regel geerbt ist
- InheritanceFlags: zeigt die Art der Vererbung nach unten an.
Benutzerkonten können in zwei Formen ausgedrückt werden: im Klartext oder durch Security Identifiers (SIDs). Bei der Verwendung von GetAccessRules() muss man angeben, wie man die Benutzer sehen will: [System.Security.Principal.NTAccount] (Klartext) oder [System.Security.Principal.SecurityIdentifier] (SID). Davor besitzt die Methode noch zwei Parameter, mit denen man steuern kann, welche Regeln man sehen will: die explizit auf dem Objekt gesetzten Regeln (erste Parameter) und/oder die vererbten Regeln (zweite Parameter). Die expliziten ACEs erscheinen immer zuerst in der Liste.
Der Zugriff auf das Code Property Access ist gleichbedeutend mit GetAccessRules($true, $true, [System.Security.Principal.NTAccount]). Möchte man andere Informationen, muss man GetAccessRules() explizit nutzen. In dem Skript werden beim zweiten Ausgeben der Liste nur die geerbten Regeln in SID-Form aufgeführt.
Programmcodebeispiele PowerShell-Skript
$a = Get-Acl g:\daten\kunden
Rechte als NT-Konten holen
$aces =$a.access
entspricht: $aces =$a.GetAccessRules($true, $true, [System.Security.Principal.NTAccount])
Write-Host "Alle Regeln:" -F yellow
foreach ($ace in $aces)
{
write-host $ace.IdentityReference.ToString() "hat Zugang" $ACE.FileSystemRights $ACE.AccessControlType "Vererbt?" $ACE.IsInherited
}
$aces =$a.GetAccessRules($true, $false, [System.Security.Principal.SecurityIdentifier])
Write-Host "Nur die expliziten Regeln, in SID-Form:" -F yellow
foreach ($ace in $aces)
{
write-host $ace.IdentityReference.ToString() "hat Zugang" $ACE.FileSystemRights $ACE.AccessControlType "Vererbt?" $ACE.IsInherited
}
Querverweise
Liste aller Codebeispiele
Definition '.NET Framework Class Library'
PowerShell Community Portal