我有一个对象列表,想要过滤名称类似于列表中的字符串之一的所有元素。
我目前的方法是使用.htaccess
,但这会导致对where-object的调用很长。
where-object
我希望减少此处所需的样板,因为我希望字符串列表会很大。
我还希望能够在另一个输出上使用过滤器,这似乎只能通过复制粘贴where-object块来实现。
答案 0 :(得分:2)
您可以改用正则表达式notmatch
。这将更快地执行。
像
Get-AppxPackage | Where-Object {$_.name -notmatch 'store|MSPaint'}
您可以输入数组或通过读取文本文件来构建模式,而不是键入不匹配的文字名称。 假设您在文本文件中有一个名称列表
store
MSPaint
...
然后您可以使用
作为数组读取此文件。$list = Get-Content -Path "<PATH TO THE FILE>"
下一步,结合此列表以构建类似的模式
$pattern = (($list | ForEach-Object {[regex]::Escape($_)}) –join "|")
然后做
Get-AppxPackage | Where-Object {$_.name -notmatch $pattern}
希望这会有所帮助
答案 1 :(得分:0)
这段代码展示了如何在 where-object 中使用 -and 和 -or 进行过滤
class cCustomField
{
[string] $Id
[string] $Name
[string] $Description
[string] $Type
[bool] $On_projects
[bool] $On_people
}
$list = New-Object Collections.Generic.List[cCustomField]
... load your data ....
filter using -and -or
$my_object=$list | Where-Object {$_.name -EQ 'gender' -and $_.on_people -EQ $true }