获取少数用户所属的 DL 列表
get list of DLs few users are member of
我是 powershell 的初学者,正在尝试创建脚本。
我有用户列表,对于他们我需要知道他们被添加到哪些 DLs。
我面临的问题是,它只显示 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....
非常感谢。
假设您正在寻找分发列表,您可以判断一个组是安全组还是分发列表 通过查看 ADGroup
对象的 GroupCategory
属性。
无需查看用户的 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
我是 powershell 的初学者,正在尝试创建脚本。 我有用户列表,对于他们我需要知道他们被添加到哪些 DLs。
我面临的问题是,它只显示 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....
非常感谢。
假设您正在寻找分发列表,您可以判断一个组是安全组还是分发列表 通过查看 ADGroup
对象的 GroupCategory
属性。
无需查看用户的 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