1

我已经使用 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 命令及其Active Directory 感知语法,但是当我在我的 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

我尝试在 get-acl 命令前加上AD:前缀,以及ldap://localhost/,但错误保持不变。我也未能检索到其他类型对象(如usergroup)的 DACL。

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

4

2 回答 2

1

我有同样的问题,但没有在互联网上找到正确的答案。我花了很长时间才找到一个可行的解决方案。由于此讨论是通常搜索引擎上的最佳结果之一,但没有提供实际答案,因此我决定将其发布在这里:

以下问题将我推向了正确的方向: How do I set-location ad: to a different active directory domain with Powershell

我用 Windows 2012R2(我认为它有 Powershell 4.0)对其进行了测试

假设您有一个 AD LDS 实例在“server:port”上运行,后缀为“dc=root,dc=com”,以下代码将使用“get-acl”屏幕打印此后缀节点的 ACL:

  1. 添加活动目录模块:

导入模块活动目录

  1. 您需要定义一个类似于“AD:”的新访问标识符。此标识符绑定到您当前的 Powershell 会话:(此示例使用“myLDS:”,但您可以定义任何您想要的标识符字符串)

New-PSDrive -Name myLDS -PSProvider ActiveDirectory -Server "server:port" -Scope Global -Root "//RootDSE/"

  1. 最后,您可以使用这个新标识符来访问 LDS 存储的 acl,例如在屏幕上打印它们:

(Get-ACL 'myLDS:\dc=root,dc=com').access

请注意,“get-acl”和 dsacls.exe 的输出不同。'get-acl' 将返回主题的原始 SID,而 dsacls 在内部将 SID 转换为 DN 并返回 DN。因此,如果您使用“get-acl”,但需要 DN,则需要使用额外的 LDAP 查询自己进行此转换。

于 2016-01-22T20:25:39.483 回答
0

尝试:

dsacls 'OU=stuff,OU=apps,DC=example,DC=com'

我在 PowerShell 中看到了一些有趣的东西,并怀疑它与权限有关。也就是说,尝试:

获取 ADOrganizationalUnit -Filter 'name -eq "stuff"'

这可能有效,使用 Get-ADOrganizationalUnit 上的方法和属性可能有助于隔离问题

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

于 2015-04-16T17:18:20.517 回答