PowerShell Import-CSV: Analyse d’un fichier texte CSV délimité par des virgules

2 novembre 2019 Non Par Rached CHADER

Fichiers texte délimités par des virgules

Voici un exemple de fichier texte (.csv) délimité par des virgules. Vous remarquerez en haut qu’il y a des en-têtes pour chaque colonne : Nomordinateur, AdresseIP, bureau et Propriétaire. La cmdlet import-csv de PowerShell comprend ce format par défaut et s’attend à voir les en-têtes de colonne avant d’analyser les données principales.

1
2
3
4
Computername,IPaddress,Office,Owner
ORDI1,192.168.0.1,Grasse,toto
ORDI2,192.168.0.2,Nice,tata
ORDI3,192.168.0.3,Cannes,titi

Utilisation de l’applet de commande import-csv de PowerShell

Import-csv ne peut pas lire le fichier texte et afficher les données dans la console, comme indiqué ci-dessous. L’extension de fichier peut-être .csv où .txt.

1
import-csv “c:\ordi.csv”

Tout comme les autres applets de commande PowerShell, vous pouvez filtrer et trier les informations. La commande suivante affiche tous les ordinateurs appartenant à toto.

1
import-csv “c:\ordi.csv”| where-object {$_. Owner -eq "toto"}

Ajouter des en-têtes et changer le délimiteur par défaut

Le paramètre –header vous permet de spécifier une chaîne qui ajoute des en-têtes de colonnes si elles ne sont pas présentes dans le fichier texte en cours d’importation. De plus, alors que import-csv attend une virgule comme symbole par défaut pour la délimitation des champs de données, vous pouvez spécifier un autre symbole à l’aide du paramètre –delimiter. Par exemple, pour importer le fichier .csv ci-dessous, qui n’a pas d’en-tête pour chaque colonne et utilise un point-virgule comme délimiteur, j’ai utilisé cette commande :

1
import-csv “c:ordi.csv” –header Name, IP, Location, User –delimiter :

Un traitement plus complexe peut être obtenu en analysant le fichier en utilisant import-csv dans le cadre d’une boucle foreach. Dans l’exemple ci-dessous, chaque ligne du fichier est analysée et les données de champ séparées en tant que variables. Juste pour prouver que cela fonctionne, j’ai ajouté la cmdlet write-host à la fin de la boucle pour exporter les résultats vers la console. Naturellement, vous pouvez faire tout ce qui est nécessaire avec les données de vos propres scripts.

1
2
3
4
5
6
7
8
$computers = import-csv “c:ordi.csv”
ForEach ($computer in $computers){
$computername = $($computer.Computername)
$ipaddress = $($computer.IPaddress)
$office = $($computer.Office)
$owner = $($computer.Owner)
Write-host $computername $ipaddress $office $owner
}

Remplacer le délimiteur

Il est facile de remplacer le délimiteur dans un fichier, par exemple si vous devez utiliser le fichier dans un système ne prenant en charge qu’un délimiteur spécifique. Commencez par importer le fichier texte à l’aide de la cmdlet import-csv, puis exportez-le avec export-csv, en lui attribuant un nom de fichier différent et en ajoutant le paramètre –delimiter avec le caractère souhaité, comme indiqué ici :

1
$computers = import-csv “c:tempcomputers.txt” $computers | export-csv “c:tempcomputers2.txt” -delimiter :

Visits: 35893