2014-10-08 49 views
1

刪除項這是我的$array從System.Array的PowerShell中

Name   GUID 
----   ---- 
PC001   AAAA 
PC001   BBBB 
PC001   CCCC 
PC002   AAAA 
PC002   DDDD 
PC003   AAAA 
PC003   CCCC 

這裏是我的腳本:

$Guid = "CCCC" 
$workingName = $array | where Guid -eq $Guid | select name 
$array.remove($workingName) #broke! 

我想要實現的是,如果$Guid = "CCCC"它會刪除所有實例NameCCCC,其中CCCC存在,所以在這種情況下,五行(PC001爲三行,PC0003爲兩行),如果是BBBB,則只會刪除PC001的三行。

FYI:這是一個更大的腳本

回答

0
$Guid = "CCCC" 
$workingName = $array | where Guid -eq $Guid | select -ExpandProperty name 
$array = $array | where { $_.name -notin $workingName } 
4

那麼的一部分,你可以創建一個新的變量或者只是使用WHERE語句更新離開一個。

$Array | ? {$_.GUID -ne 'CCCC'} 

這將返回數組後面沒有條目

或者您可以使用方法,就像你正在試圖做的有,但你需要建立數組有點不同......這裏有一個例子。

$Proc = Get-Process | Select -first 2 
$a = New-Object System.Collections.ArrayList 
$a.Add($Proc[0]) 
$a.Add($Proc[1]) 
$a 
Write-Warning 'removing index 1' 
$a.remove($Proc[1]) 
$a 
+0

$陣列| ? {$ _。GUID - 一個'CCCC'}不會做OPS想要的。不僅應刪除具有該GUID的條目,而且還應刪除具有該GUID條目的名稱的條目。根據操作示例,您的代碼會將PC001 AAAA,PC001 BBBB和PC003 AAAA留下,但操作員希望刪除這些條目。 – DanL 2014-10-08 17:16:56

+0

我不得不閱讀他的帖子之前,這是很清楚的......我猜輸出的例子會有幫助。 – 2014-10-08 17:32:46

+1

NoahSparks對不起,我不清楚,我接受你的觀點並提供一個輸出示例。 我非常感謝你的努力(我投了票),雖然我知道你的答案沒有提供我需要的確切輸出,但它確實幫助我開發了我自己的答案(這非常接近答案@DanL給了,我只是沒有'-notin')。我也很抱歉,到目前爲止,我沒有任何更新來更新你,爲了達到最後期限,我正在同時處理這個問題。 – idarryl 2014-10-08 18:53:02