我已经使用LDP在某些AD-LDS对象上手动设置了一些自定义DACL。我正在尝试编写一个以SDDL格式导出这些ACL(目前只有DACL)的脚本。
我可以使用以下代码检索AD-LDS对象:
$obj = Get-ADOrganizationalUnit -Filter {Name -Like 'stuff'} -searchbase "OU=apps,DC=example,DC=com" -server 'localhost:389'
$obj[0].distinguishedName
OU=stuff,OU=apps,DC=example,DC=com
我知道get-acl Powershell command及其Active Directory aware syntax,但是当我在我的AD-LDS对象上尝试它时,它会失败
Get-Acl : Cannot find path 'OU=stuff,OU=apps,DC=example,DC=com' because
it does not exist.
At line:1 char:9
+ (Get-Acl <<<< "DC=example,DC=com").access
+ CategoryInfo : ObjectNotFound: (:) [Get-Acl], ItemNotFoundException
+ FullyQualifiedErrorId : GetAcl_PathNotFound_Exception,Microsoft.PowerShell.Commands.GetAclCommand
我尝试使用AD:
前缀以及ldap://localhost/
为get-acl命令添加前缀,但错误保持不变。我也无法检索其他类型对象的DACL(例如user
和group
)。
如何使用Powershell以SDDL格式检索AD-LDS对象的DACL?
答案 0 :(得分:1)
我没有在互联网上找到合适的答案时遇到了同样的问题。我花了很长时间才弄清楚一个有效的解决方案。由于这个讨论是普通搜索引擎的最佳结果之一,但没有提供实际答案,我决定将其发布在这里:
以下问题将我推向了正确的方向: How do I set-location ad: to a different active directory domain with Powershell
我用Windows 2012R2测试了它(我认为它有Powershell 4.0)
假设您在&#34; server:port&#34;上运行了AD LDS实例。使用后缀&#34; dc = root,dc = com&#34;,以下代码将使用&#39; get-acl&#39;屏幕打印此后缀节点的ACL:
Import-Module activedirectory
New-PSDrive -Name myLDS -PSProvider ActiveDirectory -Server&#34; server:port&#34; -Scope Global -Root&#34; // RootDSE /&#34;
(Get-ACL&#39; myLDS:\ dc = root,dc = com&#39;)。access
请注意&#39; get-acl&#39;和dsacls.exe的输出不同。 &#39;获得的ACL&#39;将返回主题的原始SID,而dsacls在内部将SID转换为DN并返回DN。因此,如果您使用&#39; get-acl&#39;但需要DN,则需要使用额外的LDAP查询自行执行此转换。
答案 1 :(得分:0)
尝试:
dsacls&#39; OU = stuff,OU = apps,DC = example,DC = com&#39;
我在PowerShell中看到了一些有趣的事情,并怀疑它与权限相关。那就是说,试试:
Get-ADOrganizationalUnit -Filter&#39; name -eq&#34; stuff&#34;&#39;
这可能有用,可以使用Get-ADOrganizationalUnit中可能有助于隔离问题的方法和属性
当我找到问题的根本原因时,我会更新这篇文章。