导出具有特定组列表的 AD 用户

Export AD users with list of specific groups

我一直在尝试提取 AD 用户和 select mailnamememberof。然后我只需要列出 memberof 输出中的特定组,所以我最终得到每个用户的列表,其中包含他们的姓名、电子邮件地址和与特定名称匹配的特定组,而不是他们所属的所有组成员.

Get-ADUser username -Properties memberof | Select-Object memberof

我似乎找不到执行此操作的方法,因为我最终得到的是上面的 noteproperty 或空管道。有没有办法实现我想要做的事情?

memberOf 属性包含一个 distinguishedName (DN) 值列表,每个值对应一个组。

在 运行 Get-ADUser 之前检索您感兴趣的群组,这样您就可以将群组 DN 与 memberOf:

中的条目进行比较
$GroupDNs = Get-ADGroup -Filter {Name -like "*finance*" -or Name -like "*creditcontrol*"} | Select-Object -ExpandProperty DistinguishedName

现在,您可以使用这些 DN 通过计算的 属性 过滤组成员资格,如下所示:

$UserInfo = foreach($username in @("bob","alice","joe")){
    $User = Get-ADUser -Identity $username -Properties mail,memberOf |Select Name,mail,memberof
    $User | Select-Object Name,mail,@{Label="GroupDNs";Expr = {$_.memberof | Where-Object {$Groups -contains $_}}}
}

无需为每个 memberof 条目执行新的 Get-ADGroup 查询。

如果您想要一组名称的字符串,而不是包含字符串数组的 NoteProperty,您可以将组填充到哈希表中,然后将其用于 "look up" memberof 条目,使用ContainsKey()方法:

$Groups = @{}
Get-ADGroup -Filter {Name -like "*finance*" -or Name -like "*creditcontrol*"} | ForEach-Object {
    $Groups[$_.DistinguishedName] = $_
}

$UserInfo = foreach($username in @("bob","alice","joe")){
    $User = Get-ADUser -Identity $username -Properties mail,memberOf |Select Name,mail,memberof
    $User | Select-Object Name,mail,@{Label="Groups";Expr = { ($_.memberof | Where-Object {$Groups.ContainsKey($_)} | ForEach-Object { $Groups[$_].Name}) -join ";" }}
}

$UserInfo | Export-Csv C:\aduserinfo.csv -NoTypeInformation