Excluindo valores de um arquivo CSV no PowerShell

1

Estou tentando determinar como excluir valores de uma matriz com base em um arquivo CSV. Esta é a melhor opção que tenho até agora:

$arrIgnore = import-csv "ignore.csv"

foreach($objIgnore in $arrIgnore){
    $objAll = $objAll | where {$_.Name -ne $objIgnore.Name}
}

Isso não filtra um único item da matriz. Se eu escrever o problema com os valores em strings:

$objAll = $objAll | where {$_.Name -ne "value1"}
$objAll = $objAll | where {$_.Name -ne "value2"}

Funciona corretamente. Tenho certeza de que estou cometendo um erro estúpido, mas não consigo entender. : -)

    
por Scott Keck-Warren 24.03.2011 / 15:22

2 respostas

1

O $ objIgnore.Name existe? Verifique a saída de $ objIgnore.Name e verifique se ela contém o que você acha que faz. Eu acho que $ objIgnore.Name pode estar vazio. Se não, você ainda pode ter que convertê-lo em uma string de um PSObject. O que isso produz?

foreach($objIgnore in $arrIgnore){
    $objIgnore.Name
}

Consegui que o código a seguir funcionasse como você queria.

$arrIgnore = import-csv ".\ignore.csv"
$objAll = import-csv ".\all.csv"

foreach($objIgnore in $arrIgnore){
     $objAll = $objAll | where {$_.Name -ne $objIgnore.Name}
}

onde ignore.csv contém

Name  
srv1  
srv2  
srv3  
srv4  
srv5

e all.csv contém

Name 
srv1 
srv2 
srv3 
srv4 
srv6 
srv5 
srv7 
srv8 
srv9 
srv10

Na conclusão, $ objAll retorna

Name 
---- 
srv6 
srv7 
srv8 
srv9 
srv10
    
por 24.03.2011 / 15:36
1

FYI, uma maneira mais fácil de fazer isso é usar o operador -notcontains com sua matriz de strings que você deseja ignorar.

Por exemplo:

$array = @('value1','value2','value3','value4','value5')
$array | Where-Object {@('value2','value3') -notcontains $_}

Isso passa pelo array que contém todos os objetos uma vez em vez de uma vez para cada valor que você deseja excluir.

    
por 24.03.2011 / 19:36

Tags