您可以调整它以将集合发送到管道中。像下面这样的东西应该可以工作:
$Groups = 'Group1','Group2','Group3','Group4'
$Groups |
Get-ADGroup -Properties Member |
Where-Object {(Get-ADUser $_ -Properties extensionAttribute4).extensionAttribute4 -eq 'o365_facstaff'} |
Select-Object -Unique |
Measure-Object
但是,我可能会有所不同:
$Groups = 'Group1','Group2','Group3','Group4'
$Groups |
Get-ADGroupMember |
Where-Object{ $_.objectCLass -eq 'user'} |
Get-ADUser -Properties extensionAttribute4 |
Where-Object{ $_.extensionAttribute4 -eq 'o365_facstaff' } |
Select-Object -Unique |
Measure-Object
注意:在您的原始代码中,如果您将Get-ADUser 命令发送给一个组,它可能会出错,因为组可以是其他组的成员。这就是为什么在上面的示例中有一个额外的Where{} 子句来仅查找 objectClass 'user'。
如果您想弄乱组专有名称,您也可以尝试使用 LDAP 过滤器:
$Groups = @(
'Group1_DN'
'Group2_DN'
'Group3_DN'
'Group4_DN'
)
$LDAPFilter = "(&(extensionAttribute4=o365_facstaff)(|(memberOf={0})(memberOf={1})(memberOf={2})(memberOf={3})))" -f $Groups
Get-ADUser -LDAPFilter $LDAPFilter |
Select-Object -Unique |
Measure-Object
这将返回 extensionAttribute4 为 'o365_facstaff' 且属于任意 4 个组的所有用户。然后它将像以前一样通过Select -Unique & Measure-Object。
注意:在这种情况下,性能可能不是一个重要因素。但是,最好的做法是在命令中向左移动过滤,而不是使用 Where{} 子句或其他辅助处理进行后过滤。在这种情况下,利用 cmdlet 的内置过滤参数。