我有一個帶有標簽的 PowerShell 自定義物件,即{Tags = 11,12,13,14,15}. 我正在嘗試過濾掉包含一個或多個標簽的物件。到目前為止,我已經嘗試過這種表達方式,但沒有運氣。
Title : Example One
Year : 2022
Id : 12345
Tags : {11, 15}
Title : Example Two
Year : 2022
Id : 12346
Tags : {14, 15}
Title : Example Three
Year : 2022
Id : 12347
Tags : {12, 13}
代碼:
$Filter = ('11','14','15')
$Filtered_Objects = $Objects | Where-Object { $_.Tags -notin $Filter }
當我執行上面的代碼時,它會回傳所有物件。我要過濾掉的是物件示例一和二,只剩下物件示例三。
uj5u.com熱心網友回復:
遏制操作員只能將標量(單個值)與集合進行比較,但是您嘗試做的是比較操作員根本無法處理的 2 個集合。但是,您可以列舉$Filter內的過濾集合 ( )Where-Object并檢查filter 中的任何元素是否-in是.Tags集合,然后return $falseelse$true。這將導致ID = 12347您的示例中的物件。
$objects | Where-Object {
foreach($i in $Filter) {
if($i -in $_.Tags) { return $false }
}
$true
}
另一種方法是使用Linq中的Enumerable.AnyMethod:
$delegate = [Func[int, bool]]{ $args[0] -in $filter }
$objects | Where-Object {
-not [Linq.Enumerable]::Any([int[]] $_.Tags, $delegate)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/522519.html
標籤:电源外壳
下一篇:將DisplayDiscountedPriceIfAny的值從FALSE更改為TRUE*powershell.exe.config檔案xml*
