Powershell foreach筛选出组中已分离的成员
我的目标是只显示用户不是其成员的组Powershell foreach筛选出组中已分离的成员,powershell,foreach,Powershell,Foreach,我的目标是只显示用户不是其成员的组 因此,我在使用-contains操作符方面取得了一些进展。为了让-contains工作,我需要先创建一个数组,对吗 您可以使用比较对象: $GetGroupsFromUser = Get-ADPrincipalGroupMembership $WPFnamelookupbox.Text | Where-Object { $_.Name -like 'G1*' } $Groups = Get-ADGroup -Filte
因此,我在使用
-contains
操作符方面取得了一些进展。为了让-contains
工作,我需要先创建一个数组,对吗 您可以使用比较对象:
$GetGroupsFromUser = Get-ADPrincipalGroupMembership $WPFnamelookupbox.Text |
Where-Object { $_.Name -like 'G1*' }
$Groups = Get-ADGroup -Filter {Name -like "G1*"}
foreach ($G in $Groups) {
if ($GetGroupsFromUser -contains $G) {
} else {
$WPFgroups.Items.Add($G.SamAccountName)
}
}
$GetGroupsFromUser=Get-ADPrincipalGroupMembership$WPFnamelookupbox.Text |其中对象{$\名称-类似“G1*”}
$Groups=Get ADGroup-Filter“name-like'G1*”
比较对象$Groups$GetGroupsFromUser |,其中对象{$\ SideIndicator-eq“”包含的
函数在试图查找数组中元素的匹配项时效果最佳
如果您只是查找与用户尚未拥有的筛选器相匹配的组,我们也可以在where子句中使用-notcontains
$GetGroupsFromUser = Get-ADPrincipalGroupMembership $WPFnamelookupbox.Text | Where-Object {$_.name -like 'G1*' }
$Groups = Get-ADGroup -Filter "name -like 'G1*'"
Compare-Object $Groups $GetGroupsFromUser | Where-Object {$_.SideIndicator -eq "<="}
您不需要像我这样扩展组名。无论哪种方式,您都会得到类似的结果。因为您只想知道组名,所以保留完整的组对象似乎很愚蠢。理论上,这种方式执行速度也会更快。设置变量,如$groupFilter
,可以更轻松地对脚本进行更改行。因此逻辑应该是。首先获取所有组。然后获取用户所属的所有组。将它们分别存储在一个变量中。然后,无论哪个不匹配,都会显示该变量。您可以在foreach循环中执行此操作,特别是有关-in
运算符的信息。通常,获取帮助
是最有用的cmdlet之一。
$groupFilter = "G*"
$user = "user_bagel"
$allFilteredGroups = Get-ADGroup -Filter "name -like '$groupFilter'" | Select-Object -ExpandProperty name
$userFilteredGroups = Get-ADPrincipalGroupMembership $user | Where-object{$_.name -like $groupFilter} | Select-Object -ExpandProperty name
$allFilteredGroups | Where-Object{$userFilteredGroups -notcontains $_}