按Active Directory组中的唯一值进行分组

时间:2014-06-17 19:10:37

标签: powershell active-directory powershell-v3.0

在Active Directory结构内部,组中的这些字段中设置了值

  • extensionAttribute1
  • extensionAttribute2
  • extensionAttribute3
  • extensionAttribute4

大约有300个组,其中包含一个或多个这些值,我正在寻找一种有效的方法来通过扩展表中的extensionAttribute2对这些值进行分组。

我希望检索的格式如下。我将它分开以使其更具可读性,但实际上是一个哈希表,其中extensionAttribute2的每个唯一值都设置为一个值,该值是extensionAttribute2中具有该值的组对象的数组。

@{
  "001"=@(
          Group-Object-1454,
          Group-Object-221,
          Group-Object-33,
          ...
        )
  "002"=@(
          Group178,
          Group2243,
          Group3774,
          ...
        )
  ...
}

我的尝试结束的不仅仅是咸味。我意识到我可以制作一个大的foreach外观并以这种方式构建它,但我希望这可以更有效地完成。

我认为这会有效,但失败了Select-Object: null parameter

Get-ADGroup -LdapFilter $Filter -Properties extensionAttribute2 | Select-Object extensionAttribute2, $_ | Group-Object {$_.extensionAttribute2}

我做过的另一次尝试,虽然效果更好,但并不完全只返回了唯一的extensionAttribute2值

Get-ADGroup -LdapFilter $Filter -Properties extensionAttribute2 | select-object extensionAttribute2 | Group {$_}

这返回了一些正确的方向,但我已经难以理解了。

@{
  @{extensionAttribute2="001"},
  @{extensionAttribute2="002"},
  @{extensionAttribute2="003"},
  ...
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这样的东西?

$ht = @{}

Get-ADGroup -LdapFilter $Filter -Properties extensionAttribute2 |
 foreach { $ht[$_.extensionattribute2] += @($_.name) }

$ht