使用Powershell get-acl检索AD-LDS对象ACL

时间:2012-11-19 22:09:18

标签: windows-server-2008 powershell-v2.0 acl adlds

我已经使用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(例如usergroup)。

如何使用Powershell以SDDL格式检索AD-LDS对象的DACL?

2 个答案:

答案 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:

  1. 添加activedirectory模块:
  2. Import-Module activedirectory

    1. 您需要定义一个类似于&#34; AD的新访问标识符:&#34;。此标识符绑定到当前的Powershell会话: (此示例使用&#34; myLDS:&#34;,但您可以定义所需的任何标识符字符串)
    2. New-PSDrive -Name myLDS -PSProvider ActiveDirectory -Server&#34; server:port&#34; -Scope Global -Root&#34; // RootDSE /&#34;

      1. 最后你可以使用这个新的标识符来访问LDS存储的acls,例如在屏幕上打印它们:
      2. (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中可能有助于隔离问题的方法和属性

当我找到问题的根本原因时,我会更新这篇文章。