无法获取ACL Active Directory OU

问题描述 投票:1回答:2

我需要在AD OU上为服务帐户委派权限(读取,写入,创建子对象等)。

我用以下代码找到了here

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 is like "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))

我坚持使用get-ACL命令,该命令返回AD中的路径不存在,但确实存在。

谢谢你的帮助。

powershell active-directory acl
2个回答
1
投票

您使用以下方法设置ACL:

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

为什么不这样做呢?

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

或者像那样:

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

0
投票

您需要将Get-Acl CmdLet不喜欢的值转换为HEX格式。

[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名称(不包括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"
© www.soinside.com 2019 - 2024. All rights reserved.