Powershell 获取SQL表格式的ADGroup和ADGroupMember

Powershell 获取SQL表格式的ADGroup和ADGroupMember,powershell,active-directory,Powershell,Active Directory,我正在寻求帮助,以便编写一个查询,该查询将为下面查询中的每个组提取成员 Get-ADGroup -Filter 'GroupCategory -eq "Security"' -Properties ManagedBy | Where-Object {$_.ManagedBy -gt 0 -or $_.Notes -like "*Approval*"} | Select-Object Name 我希望该表看起来像这样(很抱歉表格格式不好): GroupName | GroupMember

我正在寻求帮助,以便编写一个查询,该查询将为下面查询中的每个组提取成员

Get-ADGroup -Filter 'GroupCategory -eq "Security"' -Properties ManagedBy |
  Where-Object {$_.ManagedBy -gt 0 -or $_.Notes -like "*Approval*"} |
  Select-Object Name
我希望该表看起来像这样(很抱歉表格格式不好):

GroupName | GroupMember Sec|U域管理员|用户名1 Sec|U域管理员|用户名2 Sec_EnterpriseAdmins |用户名1 Sec|U企业管理员|用户名3
我很难将
Get-ADGroup
Get-ADGroupMember
合并在一起,以表格格式输出一个包含组和组成员的表格,以便上传到SQL中。

首先,我将使用LDAP筛选器更有效地表达您所需的查询:

(&(groupType:1.2.840.113556.1.4.803:=2147483648)(managedBy=*)(notes=*approval*))
这意味着“填充了
managedBy
属性且
notes
属性包含字符串“approval”的安全组”。这减少了从服务器返回的结果数量,并减少了使用
Where Object
筛选结果的需要

其次,您可以为
managedBy
属性中的每个字符串输出一个单独的对象,并使用
字符作为分隔符将所有内容输出到CSV。以下是一个完整的示例:

Get-ADGroup -LDAPFilter "(&(groupType:1.2.840.113556.1.4.803:=2147483648)(managedBy=*)(notes=*approval*))" -Properties managedBy | ForEach-Object {
  $group = $_
  $managedBy = $_.managedBy
  foreach ( $dn in $managedBy ) {
    New-Object PSObject -Property @{
      "name" = $group.Name
      "managedBy" = $dn
    } | Select-Object name,managedBy
  }
} | Export-Csv "Demo.csv" -Delimiter "|" -NoTypeInformation

新对象之后的
选择对象
仅用于对CSV输出的属性进行重新排序,并非严格要求。

首先,我将使用LDAP筛选器更有效地表示所需的查询:

(&(groupType:1.2.840.113556.1.4.803:=2147483648)(managedBy=*)(notes=*approval*))
这意味着“填充了
managedBy
属性且
notes
属性包含字符串“approval”的安全组”。这减少了从服务器返回的结果数量,并减少了使用
Where Object
筛选结果的需要

其次,您可以为
managedBy
属性中的每个字符串输出一个单独的对象,并使用
字符作为分隔符将所有内容输出到CSV。以下是一个完整的示例:

Get-ADGroup -LDAPFilter "(&(groupType:1.2.840.113556.1.4.803:=2147483648)(managedBy=*)(notes=*approval*))" -Properties managedBy | ForEach-Object {
  $group = $_
  $managedBy = $_.managedBy
  foreach ( $dn in $managedBy ) {
    New-Object PSObject -Property @{
      "name" = $group.Name
      "managedBy" = $dn
    } | Select-Object name,managedBy
  }
} | Export-Csv "Demo.csv" -Delimiter "|" -NoTypeInformation

新对象之后的
选择对象
仅用于重新排序CSV输出的属性,并非严格要求。

+1用于正确的LDAP查询筛选器,尽管您可能会发现最后一个子句(
注释=*批准*
)最好在客户端筛选器中执行(即
Where Object
)。非索引属性上的子字符串筛选器通常较慢如果网络连接较慢且结果数量非常大,则客户端筛选可能是一个非常糟糕的主意。即使属性没有索引,也最好返回较少的结果。+1用于正确的LDAP查询筛选器,尽管您可能会发现最后一个子句(
notes=*approval*
)最好在客户端筛选器中执行(即
Where Object
)。非索引属性上的子字符串筛选器通常较慢如果网络连接较慢且结果数量非常大,则客户端筛选可能是一个非常糟糕的主意。即使属性没有索引,也最好返回较少的结果。