Не могу получить Active Directory OU - PullRequest
0 голосов
/ 06 февраля 2019

Мне нужно делегировать права (чтение, запись, создание дочернего объекта и т. Д.) В AD OU для учетной записи службы.

Я использовал следующий найденный код здесь .

Import-Module ActiveDirectory

$rootdse = Get-ADRootDSE

$guidmap = @{}
Get-ADObject -SearchBase ($rootdse.SchemaNamingContext) -LDAPFilter `
"(schemaidguid=*)" -Properties lDAPDisplayName,schemaIDGUID |
% {$guidmap[$_.lDAPDisplayName]=[System.GUID]$_.schemaIDGUID}

$extendedrightsmap = @{}
Get-ADObject -SearchBase ($rootdse.ConfigurationNamingContext) -LDAPFilter `
"(&(objectclass=controlAccessRight)(rightsguid=*))" -Properties displayName,rightsGuid |
% {$extendedrightsmap[$_.displayName]=[System.GUID]$_.rightsGuid}

$domain = Get-ADDomain

MyOU имеет вид "OU = xxx - [xx], OU = XXXXX, OU = XXX, DC = AD, DC = GROUPE, DC = NET"

$OU = Get-ADOrganizationalUnit -Identity 'MyOU'

$p = New-Object System.Security.Principal.SecurityIdentifier (Get-ADuser "testaccount").SID
$acl = Get-ACL $ou.DistinguishedName | Select-Object -ExpandProperty Access

$acl.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule `
$p,"WriteProperty","Allow","Descendents",$guidmap["user"]))

Set-ACL -ACLObject $acl -Path ("AD:\"+($ou.DistinguishedName))

I 'Я застрял с командой get-ACL, которая возвращает, что путь в моей AD не существует, но он существует.

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Вам необходимо преобразовать в формат HEX значения, которые Get-Acl CmdLet не нравятся.

[PS] C:\Windows\system32>$a = "[]"
[PS] C:\Windows\system32>$c=""
[PS] C:\Windows\system32>Foreach ($element in $a.ToCharArray()) {$c = $c + "\" + [System.String]::Format("{0:X2}", [System.Convert]::ToUInt32($element))}
[PS] C:\Windows\system32>$c
\5B\5D
[PS] C:\Windows\system32>

Поэтому вам нужно передать "OU=test dsi - \5B12345\5D....." в Get-Acl вместо OU=test dsi - [12345], например

> Get-Acl -Path "AD:OU=test dsi - \5B12345\5D,DC=ad,DC=local"

Также вы можете преобразовать все имя подразделения (не включая OU= часть):

> Get-Acl -Path "AD:OU=\74\65\73\74\20\64\73\69\20\2D\20\5B\31\32\33\34\35\5D,DC=ad,DC=local"
0 голосов
/ 06 февраля 2019

Вы устанавливаете ACL, используя:

Set-ACL -ACLObject $acl -Path ("AD:\"+($ou.DistinguishedName))

Почему бы не получить его таким же образом?

Get-ACL -Path ("AD:\"+($ou.DistinguishedName))

Или вот так:

Get-ACL -Path "AD:\$($ou.DistinguishedName)"
...