web-dev-qa-db-fra.com

Import-CSV et Foreach

J'ai une énorme liste CSV séparée par des virgules avec les adresses IP de mon réseau sur laquelle je veux lancer des requêtes. Exemple de mon entrée CSV:

172.168.0.1,172.168.0.2,172.168.0.3,172.168.0.4

Etc.... 

Lorsque je lance le code suivant pour tester la sortie: 

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

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

}

Je ne reçois aucune sortie, je pense que c'est parce qu'il n'y a pas d'en-tête spécifié. Je peux évidemment faire une solution de contournement et ouvrir le fichier CSV et taper tous les en-têtes. Y a-t-il d'autres moyens de résoudre ce problème?

10
ScriptingBerry

Vous pouvez créer les en-têtes à la volée (inutile de spécifier le délimiteur lorsque celui-ci est une virgule):

Import-CSV $filepath -Header IP1,IP2,IP3,IP4 | Foreach-Object{
   Write-Host $_.IP1
   Write-Host $_.IP2
   ...
}
20
Shay Levy
$IP_Array = (Get-Content test2.csv)[0].split(",")
foreach ( $IP in $IP_Array){
    $IP
}

Get-content Filename renvoie un tableau de chaînes pour chaque ligne. 

Sur la première chaîne uniquement, je l'ai divisé en fonction de ",". Dumping dans $ 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"
  }
}
1
Bye

La solution est de changer de délimiteur.

Contenu du fichier csv -> Note .. Aussi espace et valeur

Les valeurs sont 6 mots néerlandais 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 ';' 

Réponse:

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

Il est possible de lire un fichier CSV et d'utiliser un autre délimiteur pour séparer chaque colonne.

Cela a fonctionné pour mon script :-)

0
Jan Swinkels