【问题标题】:How to extract a list of users with rights to create domain users in the Active Directory?如何提取有权在 Active Directory 中创建域用户的用户列表?
【发布时间】:2017-08-08 15:54:33
【问题描述】:

我的任务是创建 Powershell 脚本,我们将使用这些脚本来审查客户的 Active Directory。我想补充一点,我对 Powershell 的了解非常基础,但我在网上找到了很多(包括许多 Stack Overflow 主题!)来帮助我完成这项任务。我的脚本几乎就位,但我想将一项功能添加到我的脚本中。我不知道这是否(以及如何)可能。我查看了许多网站来帮助我解决这个问题,但我没有找到任何解决方案。所以我决定向社区本身询问。这是我的问题的描述。

我想要的是拥有一个有权创建域用户并有权在域控制器上安装更新/修补程序的用户列表。为了能够创建域用户,用户必须具有域管理员的成员资格(或同等身份)(在此处找到 https://technet.microsoft.com/en-us/library/dd894463(v=ws.10).aspx。很容易获得域管理员和企业管理员(后者也具有创建的能力)显然是域用户)。我有一个脚本可以检索所有域用户和他们拥有成员资格的组,因此已涵盖。

我想要实现的是让不属于有权创建域用户的域管理员(或等效)组成员的域用户(或在本主题 https://serverfault.com/questions/83686/how-to-create-a-limited-domain-admin-that-does-not-have-access-to-domain-contr 中解释的某些 OU 中)。

没有一个属性可以定义我要查找的内容。我有一些使用 de 'admincount' 属性的想法,如下所示:Get-ADUser -Server $ADServer -Filter {admincount -gt 0}。这将向我返回 Active Directory 中默认受保护组内的所有 ADUser。但我想要的是能够获取不包含在这些组中的用户。

有没有办法获取这些信息?

【问题讨论】:

    标签: powershell active-directory administrator


    【解决方案1】:

    对不起,我开始完全编码,但没有看到你的脚本,也没有完整的测试 AD 环境在我面前,我会给你伪代码,因为看起来你已经做得足够了,你可以可能会使用此代码并使用它运行,并且很容易拥有一个完整工作的脚本,因为我在下面包含了所需的大多数主要命令/过滤器:

    获取所有 OU 的列表

    $OUs = @(Get-ADDomain | Select-Object -ExpandProperty DistinguishedName)
    $OUs += Get-ADOrganizationalUnit -Filter * | Select-Object -ExpandProperty DistinguishedName
    $OUs += Get-ADObject -SearchBase (Get-ADDomain).DistinguishedName -SearchScope OneLevel -LDAPFilter '(objectClass=container)' | Select-Object -ExpandProperty DistinguishedName
    

    使用以下方法获取所有非管理员用户的过滤列表:

    Get-ADUser -Server $ADServer -Filter { admincount -eq 0 }
    

    遍历每个 OU 并检索其权限

    foreach ($OU in $OUs)
    (Get-Acl $OU).access | where { accesscontroltype -eq 'Allow' })
    

    内循环过滤后的非管理员用户数组,其中包含执行伪管理员职责所需的每个访问权限:

    foreach ($objUser in $(Get-ADUser -Server $ADServer -Filter { admincount -eq 0 }))
    (Get-Acl $OU).access | where { identityreference -eq <TRIMMED INNER LOOP USER OBJECT NAME FROM $objUser> }
    

    如果匹配,添加到新数组,否则什么都不做

    转储数组以报告

    【讨论】:

    • 使用您提供的命令可以轻松获取所有 OU 的列表。然而,其余的并没有真正起作用。以下是对出现问题的解释:使用 cmdlet Get-ADUser -Server $ADServer -Filter { admincount -eq 0 } 时,我没有得到任何结果。我还尝试将其更改为 '-ne 1' 、 '-lt 1' 、 '-eq ' ( 是 admincount 属性的默认参数)。这些 cmdlet 都没有为我提供所有非管理员用户的列表。 admincount 属性由系统每 15 分钟自动设置一次。所以我必须为此找到解决方法。
    • 我已将您提供的循环更改为以下内容:foreach ($OU in $OUs){((Get-Acl).access | where { accesscontroltype -eq 'Allow' })}。但这段代码奇迹般地不接受“accesscontroltype”术语,并表示它不被识别为 cmdlet 的名称。我无法定义一个合乎逻辑的解释为什么它没有。最后一个我没能尝试,因此这两个不能正常工作。
    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多