2013-03-02 15 views
8

私はクエリを実行したい私のネットワークのIPアドレスを持つ巨大なカンマ区切りのCSVリストを持っています。私のCSV入力の例:インポート-CSVとForeach

172.168.0.1,172.168.0.2,172.168.0.3,172.168.0.4 

その他、各種....私は出力をテストするために、次のコードを実行すると

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

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

} 

を私は何も出力を取得していない、私はそれがあるためだと思いますヘッダーは指定されていません。私は明らかに回避策を行い、CSVファイルを開いてすべてのヘッダーを入力することができます。これを解決する他の方法はありますか?

答えて

15

あなたはハエ(区切り文字がカンマであるとき、区切り文字を指定する必要はありません)のヘッダを作成することができます。

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

:-)私のスクリプトのために働いていた(少なくとも、それは私がどう解釈するかである彼など...)ご返信用 – rene

+0

おかげで、ほんとうにありがとう。悲しいことに、CSVには同じ行に約100個のIPアドレスが含まれているので、100個のヘッダーを指定する必要がありますか? – ScriptingBerry

+0

"IP"というヘッダーを1つ作成し、その下にすべてのIPアドレスを配置しました。回避策はありますが、現在は機能しています。 – ScriptingBerry

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

は、Get-コンテンツファイル名は、各行の文字列の配列を返します。

最初の文字列でのみ、 "、"に基づいて分割します。それを$ 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

これは単純なCSVファイルでは機能しますが、カンマがフィールド値の一部である場合は失敗します。 – haliphax

+0

カンマ区切りのファイルにフィールド名の一部としてコンマがあるのはなぜですか? – PositriesElectron

0

ソリューションはデリミタを変更することです。

csvファイルの内容 - >メモ...またスペースと、値に

値は6オランダ語AAPあり、noot、ミース、ピート、ハイス、ヤン

Col1;Col2;Col3 

a,ap;noo,t;mi es 

P,iet;G ,ijs;Ja ,n 



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

回答:

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

CSVファイルを読み込み、他の区切り文字を使用して各列を区切ることができます。

は、それは私がOPは、すべてのIPのは、同じ行にあるファイルを持っている期待

関連する問題