首页 > 解决方案 > 如何按属性检查对象成员是否存在于数组中?

问题描述

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

我有以下对象:

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

有没有办法遍历数组中的每个项目?

标签: arrayspowershellobjectproperties

解决方案


要检查列表中的任何单词是否与 匹配$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)

推荐阅读