$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)
}
}
我的目标是我只想显示用户不是其成员的群组。
所以我在-contains
运算符上取得了一些进展。为了-contains
能够工作,我需要先创建一个数组,对吗?
答案 0 :(得分:2)
您可以使用Compare-Object
:
$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 "<="}
答案 1 :(得分:1)
-contains
的功能最佳。
如果您只是在寻找与用户不已经拥有的过滤器匹配的组,我们可以在where子句中使用-notcontains
。
$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 $_}
您不需要像我一样扩展群组名称。您将获得类似的结果。因为你只想知道名字,所以保留完整的组对象似乎很愚蠢。理论上它也会以这种方式表现得更快。设置$groupFilter
之类的变量可以更轻松地对您的脚本进行更改。