【发布时间】:2016-05-11 17:33:04
【问题描述】:
我正在尝试找出这样做的逻辑:
- 查询特定 OU 中的所有 AD 组
- 查询特定OU中的所有用户
- 查询所有用户的组成员身份
- 如果任何用户在初始组查询中属于一个或多个组,则输出该信息
- 如果任何用户不属于初始组查询中的任何组,也输出该信息
我在这个网站上进行了挖掘,发现了一个大部分都可以使用的脚本,但我一直在思考如何将用户的组成员身份与我正在提取的原始组查询进行比较。看起来我可以使用 compare-object cmdlet,但参数似乎没有包含任何可以让我跟踪两个对象共有多少组的内容。
我在网上找到的代码如下:
$groups = Get-ADGroup -Filter * | where {$_.distinguishedname -like "*,OU=TUNE_TEST_GROUPS,OU=TUNE_TEST,DC=tune,DC=priv"}
$users = Get-ADUser -Filter * | where {$_.distinguishedname -like "*,OU=TUNE_TEST_USERS,OU=TUNE_TEST,DC=tune,DC=priv"}
foreach ( $User in $Users ) {
$userGroups = Get-ADPrincipalGroupMembership $User
if ( $userGroups.Count -gt 1 ) {
"{0} is a member of the following {1} groups:" -f $User.SamAccountName, $userGroups.Count
foreach ( $group in $userGroups ) {
"`t{0}" -f $group.Name
}
} elseif ( $userGroups.Count -lt 1 ) {
"{0} is a member of the following {1} groups:" -f $User.SamAccountName, $userGroups.Count
foreach ( $group in $userGroups ) {
"`t{0}" -f $group.Name
}
}
}
问题在于我无法将用户组名称与第 1 行中的组查询名称进行比较。我也无法确定用户属于其中的 1 个或多个组列表。我不确定我是否可以使用相同的计数方法。
【问题讨论】:
-
实际上,我认为我可以将初始组和用户查询都导出到 csv 中,并使用嵌套在 foreach 循环中的 if/else 语句遍历它们。会试一试并报告
标签: powershell active-directory