显示所有不在AD中的用户组的用户
问题描述:
我正在尝试获取不在AD组中的所有用户的列表。显示所有不在AD中的用户组的用户
集团所有电子邮件用户
我已经试过这样:
Get-ADUser -Filter * -properties memberof | Where-Object {!($_.memberof -like "*all email*")} | measure
,但它不筛选出正确。有任何想法吗?
答
memberof属性可能会返回一个字符串数组,因此您必须遍历所有字符串(不同组),以确定该组是否不存在于其memberof中。然而,这种方法并不能解决其他团体成员的团体等问题。
我的方法?
1)抓取该All Email Users组的所有成员。如何迭代该组的组成员(如果有的话)以获得真实成员,网络上有解决方案。他们的用户名应该存储在一个字符串[]中。这不应该太难,但我不知道你是多么有经验的w/powershell。
2)从AD获取所有用户。还将其用户名存储在字符串[]中。
3)在两个字符串数组上使用diff
cmdlet,它将为您提供在一个[]中存在但不在另一个中的项目(在这种情况下为用户名)。 DIFF基本上是这样的:
diff $arUsers1 $arUsers2
答
倘若有嵌套组的“所有电子邮件”组的成员,我添加了-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
收集(如果没有记错,你就必须要么的samAccountName或全DN)的丰富的广告对象。这个应该足以从Active Directory cmdlet获得结果。