我需要在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
$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中的路径不存在,但确实存在。
感谢您的帮助。
答案 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"