如何通过属性检查对象成员是否存在于数组中?

时间:2018-09-12 07:27:51

标签: arrays powershell object properties

我无法理解如何通过属性检查数组中是否存在对象成员。

我有以下对象:

PS> $siteUser

Id Title                            LoginName                                                                   Email
-- -----                            ---------                                                                   -----
1305 cinuwyl@banit.club             i:0#.f|membership|urn%3aspo%3aguest#cinuwyl@banit.club                      cinuwyl@banit.club

我想检查数组中是否存在属性membership中的字符串LoginName

federateddirectoryclaimprovider
tenant
membership

通过指定membership的数组索引,我只获得了匹配:

$siteUsers.LoginName | Where-Object {$_ -match $inclusionObjects[2]}

但是,这要求我事先知道匹配字符串的数组索引。

我尝试过的另一件事是没有结果:

$siteUsers | Where-Object {$inclusionObjects | ForEach-Object {$_ -match $_.LoginName}}

有没有一种方法可以遍历数组中的每个项目?

1 个答案:

答案 0 :(得分:0)

要检查列表中是否有任何单词与$siteUsers.LoginName相匹配,可以使用以下命令:

$siteUsers = [pscustomobject]@{
  Id=1305;
  Title='cinuwyl@banit.club';
  LoginName='i:0#.f|membership|urn%3aspo%3aguest#cinuwyl@banit.club';
  Email='cinuwyl@banit.club'
}

$inclusionObjects = [string[]]'federateddirectoryclaimprovider','tenant','membership'
$predicate = [Func[string,bool]]{$siteUsers.LoginName.Contains($args[0])}

[System.Linq.Enumerable]::Any($inclusionObjects, $predicate)