在特定AD组中获取ADUser

时间:2016-03-25 15:26:26

标签: powershell active-directory

我希望通过特定群组中的powershell获取AD用户帐户。

我会知道我要查找的用户的GivenNameSurname,因此Get-ADUser似乎是一个很好用的功能。

问题是我们在OU中有大量用户,我想将搜索范围限制为一个AD组以及该AD组下的组。据我所知,SearchBase的{​​{1}}参数仅适用于OU,而不适用于组。

我希望尽可能高效地完成此操作(即不能获取群组中的所有用户并在这些用户中进行搜索)。

1 个答案:

答案 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

请注意,此方法不适用于用户的主要群组。

相关问题