Centrum skryptów - Systemy operacyjne

Ustawianie pola „Zarządzany przez” przy użyciu Windows PowerShell

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Ustawianie pola „Zarządzany przez” przy użyciu Windows PowerShell

Cześć, Skrypciarze! Od paru tygodni staram się napisać skrypt Windows PowerShell, umożliwiający ustawienie pól „Zarządzany przez” oraz „Menedżerowie mogą aktualizować listę uczestników”. Wiem, że grupa Managers powinna otrzymać uprawnienie WriteMembers Allow, ale nie wiem, jak to zrobić. Próba ustawienia właściwości WriteProperties Allow nie działa z następujących powodów:

  1. Pole „Menedżerowie mogą aktualizować listę uczestników” nie zostaje zaktualizowane.
  2. Przyznawane są zbyt duże uprawnienia.

Mój skrypt jest bardzo długi (omawiana kwestia to tylko jeden z wielu fragmentów), a jeśli uda mi się go ukończyć, mój zespół będzie mógł zaoszczędzić dosłownie setki godzin pracy, poświęcanej na tworzenie i zabezpieczanie folderów. Proszę o pomoc!

-- JB

Cześć, JB! Namówiłem Brandona, specjalistę MVP w zakresie PowerShell, na przyjrzenie się tej kwestii. Oto odpowiedź:

Skrypt doczekał się nawet własnego wpisu blogowego. Mam nadzieję, że to pomoże. Skrypt powoduje dodanie do listy kontroli dostępu wpisu ACE, umożliwiającego zarządzanie kontami użytkowników.

################################################################

function New-ADACE {

    Param([System.Security.Principal.IdentityReference]$identity,

        [System.DirectoryServices.ActiveDirectoryRights]$adRights,

        [System.Security.AccessControl.AccessControlType]$type,

        $Guid)

    

    

    $help = @"

    $identity

        System.Security.Principal.IdentityReference

        https://msdn.microsoft.com/en-us/library/system.security.principal.ntaccount.aspx

    

    $adRights

        System.DirectoryServices.ActiveDirectoryRights

        https://msdn.microsoft.com/en-us/library/system.directoryservices.activedirectoryrights.aspx

    

    $type

        System.Security.AccessControl.AccessControlType

        https://msdn.microsoft.com/en-us/library/w4ds5h86(VS.80).aspx 

    

    $Guid

        Typ obiektu właściwości

        GUID schematu obiektu, którego dotyczy zasada dostępu.

"@

    $ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($identity,$adRights,$type,$guid)

    $ACE

}

 

# Przykładowy kod ilustrujący użycie funkcji New-ADACE

# Utworzenie wpisu ACE w celu dodania do obiektu

$myGuid = "bf9679c0-0de6-11d0-a285-00aa003049e2" #GUID właściwości Members

$ID = Get-NTID "Nazwa sAMAccountName użytkownika, który otrzyma uprawnienia"

$newAce = New-ADACE $ID "WriteProperty" "Allow" $myGuid

 

# Pobranie obiektu

$DN = "<Nazwa DN obiektu użytkownika, który będzie objęty zarządzaniem>"

$ADObject = [ADSI]"LDAP://$DN"

 

# Ustawienie dostępu do obiektu

$ADObject.psbase.ObjectSecurity.SetAccessRule($newAce)

 

# Nazwa DN właściwości Managed By

$MangedByDN = "<Nazwa DN menedżera>"

 

# Ustawienie właściwości manageBy

$ADObject.Put("managedBy",$MangedByDN)

 

# Potwierdzenie zmian w zapleczu

$ADObject.psbase.commitchanges()

###############################################################
Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne