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.

 

-o((:: sprEad the l0ve ::))o-

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Time limit is exhausted. Please reload CAPTCHA.