簡體   English   中英

從對象數組中刪除Powershell對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM