web-dev-qa-db-ja.com

Import-CSVとForeach

クエリを実行するネットワークのIPアドレスを含むCSVリストがコンマで区切られています。 CSV入力の例:

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ファイルを開いてすべてのヘッダーを入力できます。これを解決する他の方法はありますか?

11
ScriptingBerry

その場でヘッダーを作成できます(区切り文字がコンマの場合、区切り文字を指定する必要はありません):

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

解決策は、区切り文字を変更することです。

Csvファイルの内容->注..また、スペースおよび値

値は6オランダ語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 ';' 

回答:

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

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

それは私のスクリプトのために働いた:-)

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

Get-content Filenameは、各行の文字列の配列を返します。

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