Skip to content

Traitement de fichiers

Afin de pouvoir traiter les fichiers, il faut d'abord comprendre comment ils sont générés et organisés.

Objectifs

À la fin de ce chapitre, vous serez capable de :

  • Créer, lire et compléter des fichiers texte avec Out-File / Get-Content / Add-Content.
  • Importer et exporter des données tabulaires avec Import-CSV et Export-CSV.
  • Vérifier l’existence de chemins et rechercher du contenu avec Test-Path et Select-String.

Les commandes permettant la création de fichiers sont Out-File, Set-Content et la redirection avec > ou >>.

Il y a cependant quelques différences entre ces possibilités :

  • La redirection ou Out-File, donneront un fichier tel qu'affiché dans la console, alors que Set-Content aura comme résultat une représentation des objets.
  • La commande Out-String -Stream convertit tous les objets sous forme de chaines. Les différentes commandes :

image

Et les résultats :

image

Dans la pratique, on utilisera plutôt la redirection ou Out-File pour les fichiers textes et Set-Content pour les fichiers binaires.

La commande Out-File offre plus de possibilités avec les paramètres -Encoding (par défaut UTF-16 LE sous Windows PowerShell 5.1, et UTF-8 sous PowerShell 7+) ou -Width pour le nombre de caractères max par ligne.

De plus avec Out-File, le retour chariot (CR = Carriage Return) et le saut de ligne (LF = Line Feed) sont pris en charge.

Out-File

Cette commande permet de créer un nouveau fichier qui sera semblable au contenu de la console

powershell
Get-Service | Where-Object{$_.Status -eq "Running"} | Out-File -FilePath T:\test\services.txt

Get-Content

Permet de mettre le contenu d'un fichier dans une variable de type tableau.

Le tableau sera composé des lignes du fichier et chaque ligne sera donc une chaîne de caractères.

powershell
$a=Get-Content "d:\test\toto.txt"

Pour parcourir le fichier :

powershell
foreach ($line in $a)
	{Write-Host $line}

Le contenu de $line est aussi un tableau.

Add-Content

Permet d'ajouter une ligne dans un fichier :

powershell
$newLine = "ligne à ajouter"
Add-Content -Path "d:\truc\machin.txt" -Value $newLine

Info

A noter que Clear-Content effacera le contenu, mais pas le fichier.

Import-CSV

Rappelons d'abord qu'un fichier .csv (Comma Separated Values) est un fichier contenant des informations séparées par défaut, par des virgules... par exemple une liste extraite d'un fichier Excel.

Il est possible de choisir un autre séparateur.

Lorsque l'on utilise cette commande, le fichier sera aussi sous forme de tableau avec des cases contenant les lignes du fichier, mais en plus chaque case sera un tableau associatif des éléments du fichier.

powershell
$users= Import-CSV "x:\temp\liste-utilisateurs.csv"

Un exemple d'affichage des informations d'un fichier CSV :

image

Export-CSV

Permet d'exporter des informations directement sous format .csv :

powershell
Get-Service | where{$_.status -eq "running"} | Export-CSV x:\test2.csv
Get-Service | where{$_.status -eq "running"} | Out-File x:\test3.csv

Il faut noter que les fichiers test2.csv et test3.csv n'auront pas le même contenu.

Avec Out-File, l'affichage est simplement redirigé vers un fichier, quelle que soit son extension, alors que pour Export-CSV le fichier contient toutes les données séparées par des virgules.

Version encore plus proche de ton modèle initial :

ConvertTo-Json

Permet d’exporter des informations directement sous format .json :

powershell
Get-Service | where{$_.status -eq "running"} | Select-Object -First 3 | ConvertTo-Json
Get-Service | where{$_.status -eq "running"} | Select-Object -First 3 | Out-File x:\test4.json

Il faut noter que les résultats obtenus n’auront pas le même contenu.

Avec Out-File, l’affichage est simplement redirigé vers un fichier, quelle que soit son extension, alors que pour ConvertTo-Json le contenu est converti en structure JSON.

Test-Path

Vérifier l'existence d'un fichier ou répertoire.

Exemple de vérification d'un répertoire :

powershell
if (Test-Path "d:\temp")
	{instructions si le répertoire existe}
else
	{instructions si le répertoire n'existe pas}

Select-String

Permet d'extraire les phrases qui contiennent l'information recherchée.

powershell
Select-String -Path T:\test\toto.txt -Pattern "toto"

Le paramètre -Quiet permet d'obtenir un booléen et -CaseSensitive pour que la recherche prenne en compte la casse.

Il est aussi possible de chercher avec une expression régulière.

image

Get-Date

Dans plusieurs cas, il est nécessaire d'avoir des fichiers qui ont un nom unique.

Par exemple, pour des fichiers log ou pour organiser des documents dans un dossier.

Une façon simple consiste à ajouter la date à un nom de fichier.

powershell
$date = Get-Date -Format "yyyy-MM-dd-HH-mm"
$filePath = "T:\"
$fileName = "service-spooler.txt"
Get-Service *spooler* >> "$filePath$date$fileName"

Et le fichier de résultat :

image

Info

Noter que la commande Get-Date est utilisée avec le paramètre -Format, ce qui permet de choisir la mise en forme de la date.

Résumé

  • La création/écriture de fichiers se fait via redirection, Out-File ou Set-Content selon le type.
  • Les cmdlets Import-CSV / Export-CSV manipulent des objets, pas seulement du texte.
  • Test-Path et Select-String sont utiles pour automatiser des contrôles et recherches.

Exercices

📥 Exo TraitemenFichiers (PDF)