2013-10-29 27 views
1

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

集团所有电子邮件用户

我已经试过这样:

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

,但它不筛选出正确。有任何想法吗?

回答

0

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

我的方法?

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

2)从AD获取所有用户。还将其用户名存储在字符串[]中。

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

diff $arUsers1 $arUsers2 
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 "=>"} 

因为$usersNotInGroupCompare-Object输出收集,你会不会有与get-adUsers收集(如果没有记错,你就必须要么的samAccountName或全DN)的丰富的广告对象。这个应该足以从Active Directory cmdlet获得结果。