我正在尝试获取不在AD组中的所有用户的列表。
群组是所有电子邮件用户
我试过这个:
Get-ADUser -Filter * -properties memberof | Where-Object {!($_.memberof -like "*all email*")} | measure
但它没有正确过滤掉。有什么想法吗?
答案 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