如何提取有权在Active Directory中创建域用户的用户列表?

时间:2017-08-08 15:54:34

标签: powershell active-directory administrator

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

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

我想要实现的目标是让域用户不是具有创建域用户权限的域管理员(或同等)组的成员(或者在本主题中解释的某些OU中{{ 3}})。

没有定义我要找的内容的属性。我有一些使用de' admincount'这样的属性:Get-ADUser -Server $ADServer -Filter {admincount -gt 0}。这将返回到Active Directory中默认受保护组内的所有ADUser。但我想要的是能够获得未包含在这些组中的用户。

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

1 个答案:

答案 0 :(得分:0)

抱歉,我开始对此进行完全编码,但是没有看到你的脚本,而且目前没有在我面前进行完整的测试AD环境,我会给你psudo代码,因为你似乎已经做得足够了您可以使用此代码并使用它运行并且很容易拥有一个完全可用的脚本,因为我需要包含以下大多数主要命令/过滤器:

获取所有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> }

如果匹配,则添加到新阵列,否则不执行任何操作

转储数据报告