1

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

组是所有电子邮件用户

我试过这个:

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

但它没有正确过滤掉。有任何想法吗?

4

2 回答 2

1

如果有嵌套组作为“所有电子邮件”组的成员,我添加-recursiveget-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输出中收集的,所以您不会拥有收集时使用的丰富 AD 对象get-adUsers(如果有内存,您将拥有 samAccountName 或完整的 DN)。这应该足以从 Active Directory cmdlet 获得结果。

于 2013-10-31T06:17:10.727 回答
0

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

我的做法?

1) 获取所有电子邮件用户组的所有成员。网上有关于如何迭代该组的组成员(如果有)以获得真正成员的解决方案。他们的用户名应该存储在一个字符串[]中。这应该不会太难,但我也不知道您在使用 powershell 时的经验如何。

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

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

diff $arUsers1 $arUsers2
于 2013-10-29T15:36:23.917 回答