获取组和子组的所有成员

Get all members for groups and subgroups

大家好。 我一直在尝试获取有关 Active Directory 中的组和子组的信息 我尝试了很多变体,例如下面的变体,

我本质上需要的是,获取名称中包含 "infolink" 的 AD 中所有组的 CSV,我需要的列是:

但不管我怎么说,我只得到了一些我需要的东西。 有人已经有了一些代码可以让我的生活更轻松一点吗?如果是这样,我将不胜感激。

    Import-Module ActiveDirectory

    $Groups = (Get-AdGroup -filter * | Where {$_.name -like "*Infolink*"} |         select name -ExpandProperty name)

    $Table = @()

    $Record = @{
      "Group Name" = ""
      "Name" = ""
      "Username" = ""
      "mail" = ""
    }


    Foreach ($Group in $Groups) {

      $Arrayofmembers = Get-ADGroupMember -identity $Group -recursive |         select name,samaccountname

      foreach ($Member in $Arrayofmembers) {
        $Record."Group Name" = $Group
        $Record."Name" = $Member.name
        $Record."UserName" = $Member.samaccountname
        $objRecord = New-Object PSObject -property $Record
        $Table += $objrecord

      }
    }

    $Table | export-csv "D:\Infolink.csv" -NoTypeInformation

试试这个,

Import-Module ActiveDirectory
$groups = Get-ADGroup -Filter "name -like '*Infolink*'" -Properties ManagedBy
$table = foreach ($group in $groups) {
    $Arrayofmembers = Get-ADGroupMember -Identity $group -Recursive
    $ArrayofmembersUsers = $Arrayofmembers | Get-ADUser -Properties Mail
    $ArrayofmembersUsers | Add-Member -Name GroupInfoLinkName -MemberType NoteProperty -Value $group.Name -Force
    $ArrayofmembersUsers | Add-Member -Name GroupInfoLinkManageBy -MemberType NoteProperty -Value $group.ManagedBy -Force
    $ArrayofmembersUsers
}
$table | Select-Object -Property GivenName, SurName, SamAccountName, Mail, GroupInfoLinkName, GroupInfoLinkManageBy | Export-Csv "D:\Infolink.csv" -NoTypeInformation

一些提示..

  • Get-ADGroup 上使用过滤器,否则您将获取 AD 中的所有组,然后进行过滤。
  • PSObject 很棒,但如果您的对象已经具有您需要的大部分属性,那么 Add-Member 有助于再添加 1 或 2 个。
  • 许多 cmdlet 都有一个 Properties 参数,您会看到我用它来包含默认情况下不包含的属性。不幸的是 Get-ADGroupMember 不是这些 cmdlet 中的一个,因此通过管道传输到 Get-ADUser 有助于提供解决方法。