PowerShell Get-Content équivalent à PowerShell Tail

Avec l’automatisation, la lecture de données à partir d’un fichier texte est un scénario courant. La plupart des langages de programmation ont au moins une méthode pour lire des fichiers texte, et PowerShell ne fait pas exception. La cmdlet PowerShell Get-Content, équivalent à la commande tail de PowerShell, lit le contenu d’un fichier texte et importe les données dans une session PowerShell.

La cmdlet PowerShell Get-Content est un outil indispensable lorsque vous avez besoin d’utiliser des fichiers texte en tant qu’entrée pour votre script. Peut-être que votre script PowerShell doit lire une liste d’ordinateurs à surveiller ou importer un modèle d’e-mail à envoyer à vos utilisateurs. Get-Content de PowerShell prend en charge facilement ces scénarios!

Et que diriez-vous de suivre un fichier journal en temps réel ? Oui, la cmdlet Get-Content de PowerShell peut le faire aussi ! Continuez à lire cet article, et vous apprendrez comment utiliser la cmdlet Get-Content pour lire des fichiers texte dans PowerShell.

Prérequis

Si vous souhaitez suivre les exemples de ce tutoriel, vous aurez besoin des éléments suivants.

  • Vous aurez besoin d’un ordinateur exécutant Windows 10. Ce tutoriel utilise la version 20H2 de Windows 10. Mais ne vous inquiétez pas, vous serez bien avec la version de Windows 10 que vous avez.
  • Vous devriez avoir au moins Windows PowerShell 5.1, ou PowerShell 7.1 installé sur votre ordinateur. Ici, PowerShell 7.1 est utilisé, mais n’importe quelle version fonctionnera !
  • Vous allez rédiger et tester des commandes, donc vous aurez besoin d’un éditeur de code. Les éditeurs recommandés sont Windows PowerShell ISE, intégré à Windows, et Visual Studio Code (VSCode). Cet article utilise VSCode.
  • Il sera également utile de créer un répertoire de travail sur votre ordinateur. Le dossier de travail peut être situé n’importe où. Cependant, vous remarquerez que les exemples dans ce tutoriel résident dans le dossier C:\demo.
  • Pour commencer, vous avez besoin de contenu ! Créez un fichier, dans votre répertoire de travail, avec le nom fruits.txt qui inclut dix fruits différents pour plus de simplicité. Vous utiliserez ce fichier texte dans tous les exemples.
cherry
 berry
 apricot
 papaya
 raspberry
 melon
 peach
 tangerine
 cantaloupe
 orange

Vous ne savez pas quelle version de PowerShell vous avez ? Visitez l’article Comment vérifier votre version de PowerShell (Toutes les méthodes !).

Lecture d’un fichier texte et renvoi du résultat en tant qu’ensemble de chaînes de caractères

La cmdlet Get-Content lit le contenu d’un fichier et, par défaut, renvoie chaque ligne d’un fichier texte en tant qu’objet chaîne de caractères. En conséquence, la collection d’objets PowerShell devient un tableau d’objets chaîne de caractères.

Le code ci-dessous lit le contenu du fichier fruits.txt et affiche le résultat sur la console PowerShell comme indiqué dans la capture d’écran ci-dessous.

Get-Content .\fruits.txt
Retrieving the text file content using PowerShell Get-Content.

Get-Content lit et stocke le contenu en tant qu’ensemble, mais comment en être sûr ? Enregistrez d’abord le contenu dans un objet PowerShell que vous pouvez ensuite examiner pour déterminer le type.

Save the content into to a object
 $fruits = Get-Content .\fruits.txt
 Display the type of the object
 $fruits.GetType()
 Retrieve the count of items within the object
 $fruits.Count
 Output the contents of the object to the console
 $fruits

En regardant la capture d’écran ci-dessous, la variable $fruits est un tableau qui contient dix objets. Chaque objet représente une seule ligne de texte.

Confirming that the text file content is stored as an array.

Retourner une ligne spécifique d’un fichier texte

Dans l’exemple précédent, vous avez appris que le résultat par défaut de Get-Content est un tableau ou une collection d’objets. Chaque élément dans une collection correspond à un numéro d’index, et les index PowerShell commencent généralement à zéro.

La capture d’écran ci-dessous montre qu’il y a dix éléments dans le tableau de chaînes de caractères. Le tableau a indexé les dix éléments de zéro à neuf.

Showing that the indexed items in the string array start at zero index.

Pour afficher uniquement la cinquième ligne de contenu, vous devrez spécifier le numéro d’index 4, entre crochets (appelé notation de tableau).

(Get-Content .\fruits.txt)[4]

Vous remarquerez peut-être que la commande Get-Content est enfermée entre parenthèses. Cette notation indique à PowerShell d’exécuter la commande enfermée entre parenthèses d’abord avant les autres opérations.

Dans la capture d’écran ci-dessous, vous verrez que le seul résultat retourné est framboise, qui est l’élément à l’index 4 et correspond à la cinquième ligne dans le fichier texte.

Returning a specific line from Get-Content results.

Que se passe-t-il si vous avez besoin d’obtenir le contenu de la dernière ligne ? Heureusement, vous n’avez pas besoin de connaître le nombre total de lignes. Au lieu de cela, utilisez [-1] comme index, et Get-Content affichera uniquement la dernière ligne du fichier.

(Get-Content .\fruits.txt)[-1]

Limitez le nombre de résultats principaux retournés par Get-Content

Utilisez le paramètre TotalCount de Get-Content pour récupérer un nombre spécifié de lignes à partir d’un fichier texte. Le paramètre TotalCount accepte une valeur longue, ce qui signifie une valeur maximale de 9 223 372 036 854 775 807.

Par exemple, la commande ci-dessous lit le contenu et limite le résultat à trois éléments.

Get-Content .\fruits.txt -TotalCount 3

Comme prévu, le résultat ci-dessous affiche uniquement les trois premières lignes du début du fichier texte.

Reading the top three results using the Get-Content command and the TotalCount parameter.

Utilisez le paramètre PowerShell Tail pour renvoyer les résultats à partir de la fin d’un fichier

Dans l’exemple précédent, vous avez utilisé la commande PowerShell Get-Content pour lire un fichier texte et limiter les résultats supérieurs. Il est également possible de réaliser l’inverse avec PowerShell Get-Content. Utilisez le paramètre PowerShell Tail pour lire un nombre spécifié de lignes à partir de la fin d’un fichier.

Le code d’exemple ci-dessous lit le fichier texte et affiche le contenu des quatre dernières lignes.

Get-Content .\fruits.txt -Tail 4

Après l’exécution de la commande PowerShell tail, le résultat attendu sera limité aux quatre dernières lignes du contenu, comme indiqué dans l’image ci-dessous.

Getting the results from the end of a file using the Get-Content Tail parameter.

Le paramètre Tail est souvent utilisé conjointement avec le paramètre Wait. L’utilisation du paramètre Wait maintient le fichier ouvert et vérifie s’il y a un nouveau contenu toutes les secondes. La démonstration ci-dessous montre les paramètres Tail et Wait en action. Pour quitter Wait, utilisez la combinaison de touches CTRL+C.

Get-Content -Path .\fruits.txt -Tail 1 -Wait
Using the wait and Tail parameters with Get-Content.

Retournant les résultats en tant que seule chaîne

Vous avez peut-être remarqué dans les exemples précédents que vous avez manipulé des tableaux de chaînes en tant que sortie de la commande PowerShell Get-Content. Et comme vous l’avez appris jusqu’à présent, la nature des tableaux vous permet d’opérer sur le contenu un élément à la fois.

Les tableaux fonctionnent souvent bien mais peuvent rendre le remplacement de chaînes plus difficile. Le paramètre Raw de la commande Get-Content lit l’ensemble du contenu d’un fichier dans un objet chaîne unique. Bien que le code ci-dessous soit le même que celui utilisé dans le premier exemple, le paramètre Raw stocke le contenu du fichier en tant que chaîne unique.

Save the content into to a object
 $fruits = Get-Content .\fruits.txt -Raw
 Display the type of the object
 $fruits.GetType()
 Retrieve the count of items within the object
 $fruits.Count
 Output the contents of the object to the console
 $fruits

La capture d’écran ci-dessous montre qu’ajouter le paramètre Raw à Get-Content a pour effet de traiter le contenu comme une seule chaîne et non comme un tableau d’objets.

Confirming that the Raw parameter of Get-Content reads the file content as a single string object.

Une fois que vous avez le contenu d’un fichier dans une seule chaîne en utilisant le paramètre Raw, que pouvez-vous en faire? Peut-être avez-vous besoin de trouver et de remplacer une chaîne à l’intérieur du contenu de ce fichier. Dans l’exemple ci-dessous, Get-Content lit le contenu d’un fichier en tant que chaîne unique. Ensuite, en utilisant l’opérateur replace, remplacez un mot spécifique par un autre.

Connexe: Recherche et remplacement de chaînes

# Obtenez le contenu brut du fichier texte
$fruits = Get-Content .\fruits.txt -Raw
# Affichez le contenu
$fruits
# Trouvez et remplacez le mot 'abricot' par 'mangue'
$fruits -replace 'apricot','mango'
Reading the content of a text file as a single string and replacing a word using the replace operator.

Lire le contenu uniquement des fichiers correspondant à un filtre

Avez-vous un dossier rempli de fichiers mais avez besoin de lire le contenu de quelques-uns seulement ? Avec PowerShell Get-Content, vous n’avez pas besoin de filtrer les fichiers séparément avant de lire leur contenu. Le paramètre Filtre de Get-Content limite les fichiers que la cmdlet lit.

Pour démontrer la lecture du contenu de seulement certains fichiers, commencez par créer quelques fichiers à lire. Comme indiqué ci-dessous, créez les fichiers dans votre dossier de travail en utilisant Add-Content.

# Add-Content crée les fichiers log1.log et log2.log s'ils n'existent pas déjà et ajoute la valeur donnée
Add-Content -Value "This is the content in Log1.log" -Path C:\demo\Log1.log
Add-Content -Value "This is the content in Log2.log" -Path C:\demo\Log2.log
# Vérifiez que les fichiers ont été créés
Get-ChildItem C:\demo
Creating test .log files using Add-Content.

Avec vos fichiers de test créés, utilisez les paramètres Filtre et Chemin pour ne lire que les fichiers .log dans le répertoire racine. L’astérisque utilisé dans la définition du filtre indique à Get-Content de lire n’importe quel fichier se terminant par .log. L’astérisque de fin du paramètre de chemin limite la lecture des fichiers uniquement au répertoire racine.

Get-Content -Path C:\demo* -Filter *.log

Comme le montre la sortie ci-dessous, seul le contenu des fichiers .log est affiché.

Using the Filter parameter with PowerShell Get-Content to limit the read files.

Connexe : Get-ChildItem : Listing Files, Registry, Certificates, and More as One

Lecture de la flux de données alternatif d’un fichier

Jusqu’à présent, vous avez travaillé exclusivement avec des fichiers texte, mais Get-Content peut lire les données du flux de données alternatif (ADS) d’un fichier. N’hésitez pas à en savoir plus sur les flux, mais vous pouvez considérer un flux comme un autre attribut de données stocké aux côtés du contenu de fichier typique.

Les flux de données alternatifs sont une fonctionnalité du système de fichiers NTFS de Windows, donc cela ne s’applique pas à Get-Content lorsqu’il est utilisé avec des systèmes d’exploitation non-Windows.

Vous pouvez voir les flux de données alternatifs en exécutant Get-Item avec le paramètre Stream. Lorsque vous référencez un fichier en utilisant le paramètre Stream, Get-Item renvoie une propriété appelée Stream comme indiqué ci-dessous. Ce flux de contenu de fichier par défaut est représenté par :$DATA.

Pour démontrer le flux par défaut :$DATA, utilisez la cmdlet Get-Item pour afficher tous les flux disponibles dans le fichier fruits.txt. Comme indiqué ci-dessous, Get-Item affiche un seul flux.

Get-Item -Path .\fruits.txt -Stream *
Listing all available streams in a file using Get-Item.

Le paramètre Stream de Get-Content lit explicitement le contenu du flux par défaut :$DATA comme indiqué ci-dessous. Le contenu renvoyé est le même que la sortie par défaut de Get-Content car le flux :$DATA est lu par défaut.

Get-Content -Path .\fruits.txt -Stream ':$DATA'
Explicitly reading the :$DATA stream using Get-Content.

Pour démontrer la récupération d’un flux de données alternatif en utilisant Get-Content, modifiez un fichier en utilisant Add-Content pour ajouter le nouveau flux. Utilisez Get-Item pour afficher le nouveau flux aux côtés du flux par défaut :$DATA, comme le montre l’exemple ci-dessous.

# Ajoutez un nouveau ADS nommé Secret au fichier fruits.txt
Add-Content -Path .\fruits.txt -Stream Secret -Value 'This is a secret. No one should find this.'
Get-Item -Path .\fruits.txt -Stream *
Adding the Secret alternate data stream using Add-Content and displaying the new stream with Get-Item.

Comme seul le flux :$DATA est lu par défaut, utilisez le paramètre Stream de Get-Content pour récupérer le contenu du nouveau flux Secret. Comme indiqué ci-dessous, le contenu du flux Secret est affiché au lieu du contenu par défaut du fichier.

Get-Content -Path .\fruits.txt -Stream secret
Using Get-Content to read the Secret alternate data stream content.

Étapes suivantes avec PowerShell Get-Content

Dans cet article, vous avez appris de nombreuses façons d’utiliser Get-Content pour lire et manipuler le contenu. Vous avez même appris que Get-Content est assez flexible pour lire le contenu à partir de flux de données alternatifs!

Avec ce que vous avez appris dans cet article, quelles autres façons pouvez-vous utiliser Get-Content dans votre travail? Peut-être pouvez-vous utiliser Get-Content pour déterminer si un fichier de sauvegarde est obsolète et déclencher un appel automatique pour exécuter une tâche de sauvegarde?

Source:
https://adamtheautomator.com/powershell-get-content/