Miután jelenleg az AD adatbázisa PSDrive-ként nem elérhető a PowerShell 1.0-ban, így kicsit körülményesebb a hozzáférési lista kezelése. Ráadásul az ADSI objektumoknál láttuk, hogy a PowerShell adaptációs rétege sok tulajdonságot és metódust elrejt, például épp a hozzáférési listával kapcsolatos adatokat, így itt is szükségünk van a PSBase nézet használatára.
Elsőként nézzük, hogy egy konkrét AD objektum, jelen esetben egy felhasználó hozzáférési listáját hogyan lehet kiolvasni:
[PS] C:\>$u= [ADSI] "LDAP://cn=János Vegetári,OU=Demó,DC=adatum,DC=com"
[PS] C:\>$acl = $u.psbase.objectsecurity
[PS] C:\>$acl.GetAccessRules($true,$true,[System.Security.Principal.Security
Identifier])
ActiveDirectoryRights : GenericRead
InheritanceType : None
ObjectType : 00000000-0000-0000-0000-000000000000
InheritedObjectType : 00000000-0000-0000-0000-000000000000
ObjectFlags : None
AccessControlType : Allow
IdentityReference : S-1-5-10
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
...
A $acl változó tartalmazná a hozzáférési listát, de valójában ezt nem tudjuk közvetlenül kiolvasni egy propertyből, hanem egy metódust kell meghívni (GetAccessRules), hogy emberi fogyasztásra alkalmas információkhoz jussunk. Ezen metódusnak paramétereket kell átadni a következők szerint:
PS C:\> $acl.GetAccessRules.Value
MemberType : Method
OverloadDefinitions : {System.Security.AccessControl.AuthorizationRuleColle
ction GetAccessRules(Boolean includeExplicit, Boolean
includeInherited, Type targetType)}
TypeNameOfValue : System.Management.Automation.PSMethod
Value : System.Security.AccessControl.AuthorizationRuleCollec
tion GetAccessRules(Boolean includeExplicit, Boolean
includeInherited, Type targetType)
Name : GetAccessRules
IsInstance : True
Az első bool paraméterrel lehet szabályozni, hogy kíváncsi vagyok-e az explicit hozzáférési bejegyzésekre, a második bool paraméter szabályozza, hogy kíváncsi vagyok-e az örökölt hozzáférési bejegyzésekre. A harmadik paraméter a zűrösebb, azzal lehet szabályozni, hogy a metódus kimenete milyen formátumú legyen. Én a fenti példában SID-ekre kértem, hogy fordítsa le a bejegyzéseket. Ez nem biztos, hogy jól értelmezhető, így használhatunk egy másik paraméterezési formát is, amellyel a felhasználói fiókok neveit kapjuk vissza a hozzáférési bejegyzésekben:
[PS] C:\>$acl.GetAccessRules($true,$true,[System.Security.Principal.NTAccoun
t])
ActiveDirectoryRights : GenericRead
InheritanceType : None
ObjectType : 00000000-0000-0000-0000-000000000000
InheritedObjectType : 00000000-0000-0000-0000-000000000000
ObjectFlags : None
AccessControlType : Allow
IdentityReference : NT AUTHORITY\SELF
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
...
A tulajdonosra is szükségünk lehet, ahhoz a GetOwner metódussal juthatunk hozzá, szintén használhatnánk akár a SID-es formátumot is, de talán itt is gyakoribb az olvasmányosabb nevek használata:
[PS] C:\>$acl.GetOwner([System.Security.Principal.NTAccount])
Value
-----
ADATUM\Judy
Azért álljon itt emlékeztetőül a SID-es formátum listázása is:
[PS] C:\>$acl.GetOwner([System.Security.Principal.SecurityIdentifier])
BinaryLength AccountDomainSid Value
------------ ---------------- -----
28 S-1-5-21-150787130-28... S-1-5-21-150787130-28...
A hozzáférési listák módosításához szintén számos metódust tudunk segítségül hívni:
ModifyAccessRule Method System.Boolean ModifyAcce...
ModifyAuditRule Method System.Boolean ModifyAudi...
PurgeAccessRules Method System.Void PurgeAccessRu...
PurgeAuditRules Method System.Void PurgeAuditRul...
RemoveAccess Method System.Void RemoveAccess(...
RemoveAccessRule Method System.Boolean RemoveAcce...
RemoveAccessRuleSpecific Method System.Void RemoveAccessR...
RemoveAudit Method System.Void RemoveAudit(I...
RemoveAuditRule Method System.Boolean RemoveAudi...
RemoveAuditRuleSpecific Method System.Void RemoveAuditRu...
ResetAccessRule Method System.Void ResetAccessRu...
SetAccessRule Method System.Void SetAccessRule...
SetAccessRuleProtection Method System.Void SetAccessRule...
SetAuditRule Method System.Void SetAuditRule(...
SetAuditRuleProtection Method System.Void SetAuditRuleP...
SetGroup Method System.Void SetGroup(Iden...
SetOwner Method System.Void SetOwner(Iden...
A könyv keretein túlmutat, hogy mindegyiket külön bemutassam, de ezen információk alapján azt hiszem, el lehet indulni.