.. ================================================== .. FOR YOUR INFORMATION .. -------------------------------------------------- .. -*- coding: utf-8 -*- with BOM. ========================= 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 : .. image:: Capt-commandes-crea-fichiers.PNG Et les résultats : .. image:: Capt-resultats-crea-fichiers.PNG 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 .. image:: Capt-write-champs-csv.PNG :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 .. image:: Capt-select-string-regex.PNG :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. .. image:: Capt-script-fichier-date.PNG Et le fichier de résultat .. image:: Capt-fichier-avec-date.PNG 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: * :download:`Exo TraitemenFichiers <../Exercices/E-122-9-TraitementFichiers.pdf>`