jakiś czas temu pisałem o fajnym narzędziu do sprawdzenia uprawnień w AD – AD ACL Scanner. chciałem użyć go do przeniesienia uprawnień między domenami… i okazało się, że nie jest to wcale takie proste:
- plik csv, który jest generowany jako raport, nie zawiera nagłówka – a więc nie wiadomo co oznaczają poszczególne wartości
- wartości w raporcie HTML mają nagłówki… ale nie wszystkie i nie takie same
- no i nawet jeśli znam nagłówek – to jak to przenieść?
oto szkic skryptu, który potrafi zaciągnąć plik z ADADCLscan i przenieść do innej domeny. to, co trzeba zrobić przed jego użyciem to:
- zmienić w pliku raportu nazwę domeny źródłowej na docelową we wszystkich rekordach
- wyciąć przedrostki z nazw grup [np. DOMAIN\mygroup -> mygroup]
param( [parameter(ParameterSetName="FILE",Mandatory=$true,Position=0)][string]$fileName ) import-module ActiveDirectory $AD_ACLS=import-csv $fileName -delimiter ';' -header "OU","Trustee","Right","inheritance","objectTypeGUID","InheritedObjectTypeGUID","objectACEFlags","AccessControlType","isInherited","inheritanceFlag","propagationFlags" foreach($ACLentry in $AD_ACLS) { $grpSID=new-object System.Security.Principal.SecurityIdentifier (get-adgroup $ACLentry.trustee).SID $objTypeGUID=New-Object guid $ACLentry.objectTypeGUID $inheritedOTGUID=New-Object guid $ACLentry.InheritedObjectTypeGUID $ace=New-Object System.DirectoryServices.ActiveDirectoryAccessRule( $grpSID, $ACLentry.right, $ACLentry.AccessControlType, $objTypeGUID, $ACLentry.inheritance, $inheritedOTGUID ) $acl=get-acl AD:$($ACLentry.OU) $acl.AddAccessRule($ace) set-acl -AclObject $acl AD:$($ACLentry.OU) }
skrypt jest bardzo prymitywny – np. zakłada, że uprawnienia są tylko dla grup a nie dla użytkowników czy komputerów, nie ma obsługi błędów, etc – niemniej pokazuje kilka ważnych elementów: jak wygląda pełny nagłówek, w jaki sposób korzysta się z cmdletów ACL.
eN.