powershell 无法获取ACL Active Directory组织单位

5vf7fwbs  于 2023-02-12  发布在  Shell
关注(0)|答案(4)|浏览(183)

我需要为服务帐户委派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

我的组织单位类似于“组织单位=xxx - [xx],组织单位=XXXXX,组织单位=XXX,数据中心=AD,数据中心=组,数据中心=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中的路径不存在,但它存在。
谢谢你的帮助。

4bbkushb

4bbkushb1#

您正在使用以下命令设置ACL:

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

为什么不以同样的方式得到它呢?

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

或者像这样:

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

b91juud32#

PS有时真的很烦人...试试这个:
定位广告:#这将使以下命令生效!!!!
获取ACL路径(“AD:“+($ou.可分辨名称))

lo8azlld

lo8azlld3#

您需要将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"
j1dl9f46

j1dl9f464#

这里的其他评论说你必须在执行Get-Acl时给OU加上前缀“AD:“是正确的。我遇到了一个问题,你有时会得到一个错误:

get-acl : Cannot find drive. A drive with the name 'AD' does not exist.

但为什么广告不:驱动器被Map?我发现如果你使用另一个在AD中查找东西的函数,驱动器会被Map。如果你第一次运行这样的程序:

Get-ADGroup "Domain Admins"

然后运行Get-Acl命令,Get-Acl将成功找到“AD”驱动器。

相关问题