2014-10-08 3 views
1

에 system.array에서 항목을 제거 이것은 내 $array :PowerShell을

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

내가 달성하기 위해 노력하고있어 $Guid = "CCCC" 경우 모든 인스턴스를 제거하는 것입니다 :

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

내 스크립트입니다 이 경우 CCCC이있는이 예제에서 5 행 (PC001의 경우 3 줄, PC0003의 경우 2 줄) 인 경우 BBBB이면 PC001의 세 줄만 제거합니다.

참고 :이 훨씬 더 큰 스크립트

답변

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

음의 부분은, 당신은 새로운 변수를 만들거나 단지 어디에 문을 사용하여 종료 하나를 업데이트 할 수있다.

$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 -ne 'CCCC'}는 Ops가 원하는 것을하지 않습니다. 해당 GUID가있는 항목뿐만 아니라 해당 GUID가있는 항목이있는 이름이있는 항목도 제거해야합니다. 주어진 ops 예제에서 코드는 PC001 AAAA, PC001 BBBB 및 PC003 AAAA를 남겨 둡니다. 그러나 op는 해당 항목을 제거하려고합니다. – DanL

+0

나는 분명히하기 전에 그의 게시물을 불행한 시간을 읽어야했다. 나는 출력 예제가 도움이되었을 것이라고 생각한다. –

+1

NoahSparks 미안하지만 나는 명확하지 않았습니다. 나는 출력 예를 들어 주겠다고 말합니다. 귀하의 노력에 감사드립니다 (나는 투표했습니다). 귀하의 답변이 필요한 정확한 결과물을 제공하지 못한다는 사실을 알고 있었지만 제 대답을 개발하는 데 도움이되었습니다 (답변에 매우 가깝습니다). @ DanL이 주었을 때, 나는 아직'-notin'을 가지고 있지 않았습니다.) 마감 시간을 맞추기 위해 동시에 문제를 해결하기 위해 노력하고 있었지만, 지금까지는 변경 사항을 적용하지 않아서 미안합니다. – idarryl