用于SQL的表格式的Get-ADGroup和Get-ADGroupMember

时间:2016-01-06 15:53:24

标签: 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
Sec_Domain Admins | Username 1
Sec_Domain Admins | Username 2
Sec_EnterpriseAdmins | Username 1
Sec_Enterprise Admins | Username 3

我很难加入Get-ADGroupGet-ADGroupMember,以表格格式输出一个包含组和组成员的表,以便上传到SQL。

1 个答案:

答案 0 :(得分:3)

首先,我会使用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

Select-Object之后的New-Object仅用于重新排序CSV输出的属性,并非严格要求。