【问题标题】:How to check if an object member exists in array by property?如何按属性检查对象成员是否存在于数组中?
【发布时间】:2019-02-16 18:30:06
【问题描述】:

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

我有以下对象:

PS> $siteUser

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

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

federateddirectoryclaimprovider
tenant
membership

我只是通过为membership 指定数组索引来获得匹配:

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

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

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

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

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

【问题讨论】:

  • 所以我了解您需要查找在登录列中具有短语“会员”的行是否存在于数组中?如果是这样 - 我想这只是($siteusers |Where-Object {$_.LoginName -like "*Membership*"}).count
  • 差不多。我不仅想检查“成员资格”,还想检查数组中的任何项目。我在最初的帖子中措辞错误,对不起。因此,例如 LoginName 可能包含“租户”而不是成员资格,并且现实世界的对象包含多个成员。这也应该是匹配的。

标签: arrays powershell object properties


【解决方案1】:

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

【讨论】:

  • 谢谢,试图理解这段代码。这是否要求每个对象都必须转换为 pscustomobject?我最初的示例只声明了对象中的一个成员,然而,现实世界的对象是 cmdlet 的输出并且有多个成员。
  • 不,这只是演示数据。它可以是任何对象。
  • 谢谢。如果我运行你的确切代码,我会得到:Cannot find an overload for "Any" and the argument count: "2" 必须从德语翻译一点。
  • 请在$inclusionObjects之前添加转换:[string[]]$inclusionObjects。确保 $predicate 的类型为 [Func[string,bool]]
  • 谢谢。我让它工作,但只要 $siteUsers 包含一个以上的成员,我只会得到一个 $False 的评估。是否可以实现一个循环遍历 $siteUsers 的每个成员的循环?
猜你喜欢
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多