显示所有不在AD组中的用户

时间:2013-10-29 12:31:07

标签: powershell

我正在尝试获取不在AD组中的所有用户的列表。

群组是所有电子邮件用户

我试过这个:

Get-ADUser -Filter * -properties memberof | Where-Object {!($_.memberof -like "*all email*")} | measure

但它没有正确过滤掉。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果嵌套组作为“所有电子邮件”组的成员,我为-recursive添加了get-adGroupMember开关。

我的过程是收集当前在该组中的所有用户,收集所有存在的用户,然后使用Compare-Object过滤两个组中未找到的用户(意味着不是这些用户) “所有电子邮件”组的成员。)

$usersInGroup = get-adGroupMember -identity <full dn of group> -recursive
$usersAll = get-adUsers
$usersNotInGroup = Compare-Object -referenceObject $usersInGroup -differenceObject $usersAll | 
    where-Object {$_.sideIndicator -eq "=>"}

因为从$usersNotInGroup输出中收集了Compare-Object,所以您将不会拥有使用get-adUsers收集的丰富AD对象(如果内存服务,您将拥有samAccountName或完整的DN)。此足以从Active Directory cmdlet获取结果。

答案 1 :(得分:0)

memberof属性可能会返回一个字符串数组,因此您必须遍历所有字符串(不同的组)以确定该成员中是否存在该组。然而,这种方法并不能解决作为其他群体等的成员的群体等问题。

我的方法?

1)抓住所有电子邮件用户组的所有成员。网上有解决方案如何迭代该组的组成员(如果有的话)以获得真正的成员。他们的用户名应存储在字符串[]中。这不应该太难,但我不知道你是多么有经验的w / powershell。

2)抓住AD的所有用户。还将其用户名存储在字符串[]。

3)在两个字符串数组上使用diff cmdlet,它将为您提供一个[]但不存在另一个的项目(本例中为用户名)。差异基本上是这样的:

diff $arUsers1 $arUsers2