9-Traitement de fichiers
Afin de pouvoir traiter les fichiers, il faut d’abord comprendre comment ils sont générés et organisés.
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 :
Et les résultats :
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 qui est par défaut Unicode 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
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 chaine de caractères
$a=Get-Content "d:\test\toto.txt"
Pour parcourir le fichier
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
$newLine = "ligne à ajouter"
Add-Content -Path "d:\truc\machin.txt" -Value $newLine
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
$users= Import-CSV "x:\temp\liste-utilisateurs.csv"
Un exemple d’affichage des informations d’un fichier CSV
- Export-CSV:
Permet d’exporter des informations directement sous format .csv
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, quel que soit son extention, alors que pour Export-CSV le fichier contient toutes les données séparées par des virgules.
- Test-Path:
Vérifier l’existence d’un fichier ou répertoire
Exemple de vérification d’un répertoire :
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
Select-String -Path T:\test\toto.txt -Pattern "toto"
Le paramètre -Quiet pemet 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
- 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.
Et le fichier de résultat
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.
- Exercices: