从PowerShell中的system.array中删除项目

时间:2014-10-08 13:39:13

标签: powershell

这是我的$array

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的三行。

仅供参考:这是一个更大的剧本的一部分

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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