无法获取ACL Active Directory OU

时间:2019-02-06 10:49:02

标签: powershell active-directory acl

我需要在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类似于“ 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中的路径不存在,但确实存在。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您正在使用以下方法设置ACL:

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

为什么不能以相同的方式得到它?

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

或者那样:

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

答案 1 :(得分:1)

有时PS确实很烦人……尝试一下:

位置广告:#这使以下命令起作用!!!!

Get-ACL -Path(“ AD:” +($ ou.DistinguishedName))

答案 2 :(得分:0)

您需要将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名称(不包括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"