我正在寻找帮助来编写一个查询,该查询将为下面的查询中的每个组提取成员。
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-ADGroup
和Get-ADGroupMember
,以表格格式输出一个包含组和组成员的表,以便上传到SQL。
答案 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输出的属性,并非严格要求。