Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell foreach筛选出组中已分离的成员_Powershell_Foreach - Fatal编程技术网

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 $_}