[英]Remove powershell object from objects array
我有一個巨大的pscustomobject Array1
和另一個較小的包含文本/字符串的Array2
。 我想從Array1中刪除在Array2中具有特定狀態的對象。 例如,從Array1中刪除所有具有Array2.object.status = "Removed"
元素。
我不想創建一個使用另一個對象數組-contains
或-notcontains
。 我知道該怎么做,但是我正在尋找更復雜的東西,我試圖將數組轉換為-> [System.Collections.ArrayList]
,就像這里-> $Array = [System.Collections.ArrayList]$Array
。 我嘗試使用“ Remove”和“ RemoveAt”方法,但仍收到相同的錯誤
錯誤:
Exception calling "Remove" with "1" argument(s): "Collection was of a fixed size.
下面請從我的代碼中找到摘錄:
$Array1 = [System.Collections.ArrayList]$Array1
$Array1 = obj1, obj2, obj3 #contains pscustomobjects, with multiple
properties
$Array2 = text1, text2, text3 #contains status names, only strings/text
foreach ($element in $Array1) {
if ($Array2 -contains $element.status) {
$Array1.Remove($element)
}
}
您的問題可能是$Array1
不再是[System.Collections.ArrayList]
; 您將使用=
和一個逗號分隔的對象列表來分配它。 而是嘗試使用
$Array1 = [System.Collections.ArrayList]$Array1
# Not this...
# $Array1 = obj1, obj2, obj3 #contains pscustomobjects, with multiple properties
# This, instead...
(obj1, obj2, obj3) | ForEach-Object { $Array1.Add($_) }
$Array2 = text1, text2, text3 #contains status names, only strings/text
foreach ($element in $Array1) {
if ($Array2 -contains $element.status) {
$Array1.Remove($element)
}
}
您也許也可以
[System.Collections.ArrayList]$Array1 = obj1, obj2, obj3
# Not this...
# $Array1 = obj1, obj2, obj3 #contains pscustomobjects, with multiple properties
$Array2 = text1, text2, text3 #contains status names, only strings/text
foreach ($element in $Array1) {
if ($Array2 -contains $element.status) {
$Array1.Remove($element)
}
}
實際上,這不是PowerShell背后的哲學,后者是最適合使用管道的方法(請參閱:尤其是在使用龐大的 PSCustomObject數組時了解管道 。這意味着您應保持陣列完整,並使用Where-Object動態過濾相關對象,例如:
$Array1 | Where-Object {$Array2 -Contains $_.status} | ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.