我希望通过特定群组中的powershell获取AD用户帐户。
我会知道我要查找的用户的GivenName
和Surname
,因此Get-ADUser
似乎是一个很好用的功能。
问题是我们在OU中有大量用户,我想将搜索范围限制为一个AD组以及该AD组下的组。据我所知,SearchBase
的{{1}}参数仅适用于OU,而不适用于组。
我希望尽可能高效地完成此操作(即不能获取群组中的所有用户并在这些用户中进行搜索)。
答案 0 :(得分:3)
您可以使用Get-ADGroupMember
枚举组的成员,并将其用作Get-ADUser
的输入:
Get-ADGroupMember 'groupname' |
Get-ADUser -Properties EmailAddress |
Where-Object { $_.Surname -eq 'foo' -and $_.GivenName -eq 'bar' } |
Select-Object -Expand EmailAddress
如果该组不仅包含用户对象,则需要先按类过滤成员:
Get-ADGroupMember 'groupname' |
Where-Object { $_.objectClass -eq 'user' } |
Get-ADUser -Properties EmailAddress |
Where-Object { $_.Surname -eq 'foo' -and $_.GivenName -eq 'bar' } |
Select-Object -Expand EmailAddress
要展开嵌套组,您需要一个递归函数:
function Unroll-Group($group) {
Get-ADGroupMember $group | ForEach-Object {
$userOrGroup = $_
switch ($_.objectClass) {
'group' { Unroll-Group $userOrGroup }
'user' { Get-ADUser $userOrGroup -Property EmailAddress }
}
}
}
Unroll-Group 'groupname' |
Where-Object { $_.Surname -eq 'foo' -and $_.GivenName -eq 'bar' } |
Select-Object -Expand EmailAddress
请注意,此方法不适用于用户的主要群组。