首页 > 解决方案 > 试图找到一个部门中的所有用户,并比较他们的 AD 组

问题描述

我试图找到一个部门中的所有用户,并比较他们的广告组,看看是否有任何共同的广告组。

我对编写这种脚本有点陌生 - 希望你能帮助我。

import-module activedirectory

$afd = "Wright the name of the department you want to compair"
$users = get-ADUser -Filter * -Properties department | Where-Object { $_.department -Like "$afd*" } | Select sAMAccountName, department

$users | Sort-Object -Property department | select samaccountname

ForEach ($user in $users) 
{
    
}

这就是我卡住的地方,我得到了排序列表,并希望查看所有不同部门的所有广告组并进行比较。

有没有人有想法或暗示让我再次出发?

问候西蒙

标签: powershell

解决方案


一种可能较慢但更简单的方法是利用Get-ADPrincipalGroupMembership

ForEach ($user in $users) 
{
    $UserGroups = (Get-ADPrincipalGroupMembership $user.SamAccountName).Name
    [pscustomobject]@{
        User = $user.SamAccountName
        GroupsList = $UserGroups # Keeping Groups as a collection
        GroupsString = $UserGroups -join ';' # Delimited (;) string of the groups
}

如果您使用memberOf用户对象的属性,您将已经拥有一个组列表(仅作为字符串的专有名称)。但是,稍后在您的代码中可能更难使用,因为这些值只会是字符串。

$users = get-ADUser -Filter * -Properties department,memberOf |
    Where-Object { $_.department -Like "$afd*" } |
        Select sAMAccountName,department,memberOf

在任何一种情况下,将属性值存储为数组非常适合稍后在代码中访问这些值。因为$user.memberOf例如将为您枚举所有组 DN 字符串。但是,它不适用于导出到 CSV,因为属性值应该是单个字符串。


推荐阅读