我需要为服务帐户委派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中的路径不存在,但它存在。
谢谢你的帮助。
4条答案
按热度按时间4bbkushb1#
您正在使用以下命令设置ACL:
为什么不以同样的方式得到它呢?
或者像这样:
b91juud32#
PS有时真的很烦人...试试这个:
定位广告:#这将使以下命令生效!!!!
获取ACL路径(“AD:“+($ou.可分辨名称))
lo8azlld3#
您需要将
Get-Acl
CmdLet不喜欢的值转换为十六进制格式。因此,您需要将
"OU=test dsi - \5B12345\5D....."
传递给Get-Acl
,而不是OU=test dsi - [12345]
,例如:您还可以转换整个OU名称(不包括
OU=
部分):j1dl9f464#
这里的其他评论说你必须在执行Get-Acl时给OU加上前缀“AD:“是正确的。我遇到了一个问题,你有时会得到一个错误:
但为什么广告不:驱动器被Map?我发现如果你使用另一个在AD中查找东西的函数,驱动器会被Map。如果你第一次运行这样的程序:
然后运行Get-Acl命令,Get-Acl将成功找到“AD”驱动器。