0

我是 powershell 的初学者并试图创建一个脚本。我有用户列表,对于他们,我需要知道他们添加到了哪些 DL。

我面临的问题是,它仅显示 DL 列表,有什么办法可以在用户名下获取 DL?或更好的方法来实现这一点。

注意:我们用大写字母命名我们所有的 DL,这就是为什么我在 where-object 中使用“\b[A-Z0-9_]+\b”。

$users = import-csv C:\Test\users.csv | ForEach-Object {$_.users = $_.users.Trim(); $_}  | Select-Object -ExpandProperty users

foreach ( $user in $users)

{get-ADPrincipalGroupMembership $user | select name |

Where-Object { $_.name -cmatch "\b[A-Z0-9_]+\b"} | Export-CSV "C:\test\output_file.csv" -NoTypeInformation -Append

}

现在我得到以下结果:

Group1
Group2
Group3
Group2
Group3
Group4

我的理想输出应该是:

User  MemberOf
----  --------
Bob   Group1, Group2, Group3....
Jim   Group2, Group3, Group4....

非常感谢。

4

1 回答 1

0

假设您正在查找Distribution Lists ,您可以通过查看对象的属性来判断组是安全组还是分发列表GroupCategoryADGroup

而不是查看用户的memberOf属性并找出哪些是Distribution您可以搜索ADGroups每个用户所在GroupCategory -eq 'Distribution'位置member

$users = (Import-CSV C:\Test\users.csv | ForEach-Object {
    $_.users.Trim()
}).users

$result = foreach ($user in $users)
{
    $userDN = (Get-ADUser $user).DistinguishedName
    $groups = Get-ADGroup -Filter "member -eq '$userDN' -and groupCategory -eq 'Distribution'"
    
    [pscustomobject]@{
        User = $user
        MemberOf = $groups.Name -join ', '
    }
}

$result | Export-CSV "C:\test\output_file.csv" -NoTypeInformation

如果你想使用你已经拥有的代码,通过这个小更新你应该得到你正在寻找的结果:

$users = (Import-CSV C:\Test\users.csv | ForEach-Object {
    $_.users.Trim()
}).users

$result = foreach ($user in $users)
{
    $membership = Get-ADPrincipalGroupMembership $user |
    Where-Object {
        $_.name -cmatch "\b[A-Z0-9_]+\b"
    }

    [pscustomobject]@{
        User = $user
        MemberOf = $membership.Name -join ', '
    }
}

$result | Export-CSV "C:\test\output_file.csv" -NoTypeInformation
于 2021-07-06T15:46:22.533 回答