2013-03-02 16 views
8

Ho un'enorme lista CSV separata da virgole con gli indirizzi IP della mia rete su cui voglio eseguire le query. Esempio di mio input CSV:Import-CSV e Foreach

172.168.0.1,172.168.0.2,172.168.0.3,172.168.0.4 

Etc ....

Quando eseguo il seguente codice per verificare l'output:

$filepath = "c:\scripts\servers.csv" 
$servers = Import-CSV $filepath -delimiter "," 

Foreach ($server in $servers) { 
    write-host $server 

} 

ottengo alcun output, penso che sia perché non ci sono intestazioni specificate. Posso ovviamente fare una soluzione alternativa e aprire il file CSV e digitare tutte le intestazioni. Ci sono altri modi per risolvere questo?

risposta

15

è possibile creare le intestazioni al volo (non c'è bisogno di specificare delimitatore quando il delimitatore è una virgola):

Import-CSV $filepath -Header IP1,IP2,IP3,IP4 | Foreach-Object{ 
    Write-Host $_.IP1 
    Write-Host $_.IP2 
    ... 
} 
+0

mi aspetto che il PO ha un file in cui tutti i IP sono sulla stessa linea (almeno è così che io interpreto il suo ecc ...) – rene

+0

Grazie per la risposta, Lo apprezzo molto. Purtroppo il CSV contiene circa 100 indirizzi IP tutti sulla stessa riga, quindi devo specificare 100 intestazioni? – ScriptingBerry

+0

Ho creato 1 intestazione chiamata "IP" e ho inserito tutti gli indirizzi IP sotto di esso. Soluzione alternativa, ma funziona ora. – ScriptingBerry

1
$IP_Array = (Get-Content test2.csv)[0].split(",") 
foreach ($IP in $IP_Array){ 
    $IP 
} 

Get-contenuto Nome file restituisce un array di stringhe per ogni linea.

Solo sulla prima stringa, l'ho diviso in base a ",". Scaricalo in $ IP_Array.

$IP_Array = (Get-Content test2.csv)[0].split(",") 
foreach ($IP in $IP_Array){ 
    if ($IP -eq "2.2.2.2") { 
    Write-Host "Found $IP" 
    } 
} 
+4

Sebbene funzioni per semplici file CSV, fallirà dove le virgole fanno parte dei valori del campo. – haliphax

+0

Perché dovrebbe esistere una virgola come parte del nome del campo in un file delimitato da virgole? – PositriesElectron

0

La soluzione è quella di modificare il delimitatore.

contenuto del file CSV -> Nota .. Inoltre lo spazio e, in termini di valore

I valori sono 6 olandesi parola AAP, Noot, Mies, Piet, Gijs, Jan

Col1;Col2;Col3 

a,ap;noo,t;mi es 

P,iet;G ,ijs;Ja ,n 



$csv = Import-Csv C:\TejaCopy.csv -Delimiter ';' 

Risposta:

Write-Host $csv 
@{Col1=a,ap; Col2=noo,t; Col3=mi es} @{Col1=P,iet; Col2=G ,ijs; Col3=Ja ,n} 

È possibile leggere un file CSV e utilizzare un altro delimitatore per separare ciascuna colonna.

ha funzionato per il mio script :-)