Comment lire des fichiers ligne par ligne dans Windows PowerShell
-
Lire un fichier ligne par ligne dans PowerShell en utilisant
Get-Content
avec une boucleForEach
-
Lire un fichier ligne par ligne dans PowerShell en utilisant
Get-Content
avecForeach-Object
-
Utiliser la classe
[System.IO.File]
dans PowerShell pour lire le fichier ligne par ligne -
Utiliser la classe
System.IO.StreamReader
dans PowerShell pour lire le fichier ligne par ligne - Conclusion

Dans Windows PowerShell, nous pouvons utiliser la cmdlet Get-Content
pour lire des fichiers à partir d’un fichier. Cependant, la cmdlet chargera tout le contenu du fichier en mémoire d’un coup, ce qui échouera ou se figera avec de grands fichiers.
Pour résoudre ce problème, ce que nous pouvons faire est de lire les fichiers ligne par ligne, et cet article vous montrera comment.
Avant de commencer, il est préférable de créer un fichier texte d’exemple avec plusieurs lignes. Par exemple, j’ai créé un file.txt
contenant les lignes suivantes.
file.txt
:
one
two
three
four
five
six
seven
eight
nine
ten
Selon Microsoft, une expression régulière est un motif utilisé pour correspondre au texte. Elle peut être constituée de caractères littéraux, d’opérateurs et d’autres constructions. Cet article essayera différents scripts impliquant une variable standard appelée Expressions Régulières, notée par $regex
.
Lire un fichier ligne par ligne dans PowerShell en utilisant Get-Content
avec une boucle ForEach
Nous avons d’abord discuté que la cmdlet Get-Content
a ses défauts quand nous chargeons un grand fichier car cela chargera le contenu du fichier dans la mémoire en une seule fois. Cependant, nous pouvons l’améliorer en chargeant les lignes une par une en utilisant la boucle foreach
.
Exemple de code :
foreach ($line in Get-Content .\file.txt) {
if ($line -match $regex) {
Write-Output $line
}
}
Voici une explication étape par étape du processus :
-
Obtenir le contenu du fichier :
Nous commençons par utiliser la cmdlet
Get-Content
pour lire le contenu du fichier.Get-Content .\file.txt
Remplacez
"file.txt"
par le chemin vers votre fichier. -
Itérer sur chaque ligne :
Ensuite, nous utilisons une boucle
ForEach
pour itérer sur chaque ligne du fichier. La boucle attribue chaque ligne à une variable,$line
, une à la fois.À l’intérieur de la boucle, vous pouvez remplacer
Write-Host $line
par le code qui traite chaque ligne selon vos besoins. Dans cet exemple, nous affichons simplement chaque ligne en utilisantWrite-Host
, mais vous pouvez effectuer toutes les actions souhaitées.
Lire un fichier ligne par ligne dans PowerShell en utilisant Get-Content
avec Foreach-Object
Pour lire un fichier ligne par ligne dans PowerShell en utilisant Get-Content
avec Foreach-Object
, suivez ces étapes :
-
Utilisez la cmdlet
Get-Content
:Nous commençons par utiliser la cmdlet
Get-Content
pour lire le contenu du fichier. La cmdletGet-Content
lit chaque ligne du fichier et les sort en tant qu’objets dans un pipeline.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
Remplacez "example.txt"
par le chemin vers votre fichier.
-
Boucle Foreach-Object :
Ensuite, nous utilisons la cmdlet
Foreach-Object
(%
est un alias pourForeach-Object
) pour itérer sur chaque ligne dans le pipeline. À l’intérieur du bloc de script (le code dans{}
), vous pouvez traiter chaque ligne en utilisant$_
, qui représente la ligne actuelle en cours de traitement.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
Dans cette boucle, vous pouvez effectuer toutes les actions dont vous avez besoin sur chaque ligne.
Exemple complet de code fonctionnel
Voici un exemple complet de code fonctionnel qui lit un fichier ligne par ligne et affiche chaque ligne :
powershellCopy code# Specify the path to the file
$filePath = "example.txt"
# Check if the file exists
if (Test-Path $filePath) {
# Read the file line by line and process each line
Get-Content -Path $filePath | ForEach-Object {
# Process each line here
Write-Host $_
}
} else {
Write-Host "File not found: $filePath"
}
Dans ce code :
- Nous spécifions le chemin vers le fichier en utilisant la variable
$filePath
. - Nous utilisons la cmdlet
Test-Path
pour vérifier si le fichier existe. - Si le fichier existe, nous utilisons
Get-Content
pour lire son contenu et le passer àForeach-Object
pour le traitement. - À l’intérieur du bloc de script
Foreach-Object
, nous utilisonsWrite-Host $_
pour afficher chaque ligne.
Utiliser la classe [System.IO.File]
dans PowerShell pour lire le fichier ligne par ligne
Pour lire un fichier ligne par ligne dans PowerShell en utilisant la classe [System.IO.File]
, suivez ces étapes :
-
Spécifiez le chemin du fichier :
Commencez par spécifier le chemin vers le fichier que vous souhaitez lire. Remplacez
"example.txt"
par le chemin réel vers votre fichier.powershellCopy code $filePath = "example.txt"
-
Vérifiez si le fichier existe :
Avant d’essayer de lire le fichier, il est bon de vérifier si le fichier existe en utilisant la cmdlet
Test-Path
:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
Lire le fichier ligne par ligne :
Une fois que vous avez vérifié que le fichier existe, vous pouvez utiliser la classe
[System.IO.File]
pour lire le fichier ligne par ligne. Voici le code pour cela :powershellCopy codetry { $lines = [System.IO.File]::ReadLines($filePath) foreach ($line in $lines) { # Process each line here Write-Host $line } } catch { Write-Host "Error reading the file: $_" }
Dans ce code :
- Nous utilisons la méthode
ReadLines
de la classe[System.IO.File]
pour lire le fichier ligne par ligne, et nous stockons les lignes dans la variable$lines
. - Nous utilisons ensuite une boucle
foreach
pour itérer sur chaque ligne dans$lines
et la traiter. Dans cet exemple, nous affichons simplement chaque ligne en utilisantWrite-Host
, mais vous pouvez effectuer toutes les actions souhaitées.
- Nous utilisons la méthode
Exemple complet de code fonctionnel
Voici un exemple complet de code fonctionnel qui lit un fichier ligne par ligne et affiche chaque ligne :
powershellCopy code# Specify the path to the file
$filePath = "example.txt"
# Check if the file exists
if (Test-Path $filePath) {
try {
# Read the file line by line
$lines = [System.IO.File]::ReadLines($filePath)
foreach ($line in $lines) {
# Process each line here
Write-Host $line
}
} catch {
Write-Host "Error reading the file: $_"
}
} else {
Write-Host "File not found: $filePath"
}
Dans ce code :
- Nous spécifions le chemin vers le fichier en utilisant la variable
$filePath
. - Nous vérifions si le fichier existe en utilisant
Test-Path
. - Si le fichier existe, nous utilisons la méthode
[System.IO.File]::ReadLines()
pour lire le fichier ligne par ligne et traiter chaque ligne en utilisant une boucleforeach
. - Nous incluons la gestion des erreurs pour capturer toute exception qui pourrait survenir lors de la lecture du fichier.
Utiliser la classe System.IO.StreamReader
dans PowerShell pour lire le fichier ligne par ligne
Pour lire un fichier ligne par ligne dans PowerShell en utilisant la classe System.IO.StreamReader
, suivez ces étapes :
-
Spécifiez le chemin du fichier :
Commencez par spécifier le chemin vers le fichier que vous souhaitez lire. Remplacez
"example.txt"
par le chemin réel vers votre fichier.powershellCopy code $filePath = "example.txt"
-
Vérifiez si le fichier existe :
Avant d’essayer de lire le fichier, il est bon de vérifier si le fichier existe en utilisant la cmdlet
Test-Path
:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
Lire le fichier ligne par ligne :
Une fois que vous avez vérifié que le fichier existe, vous pouvez utiliser la classe
System.IO.StreamReader
pour lire le fichier ligne par ligne. Voici le code pour cela :
powershellCopy codetry {
$reader = [System.IO.StreamReader]::new($filePath)
while ($reader.Peek() -ge 0) {
$line = $reader.ReadLine()
# Process each line here
Write-Host $line
}
$reader.Close()
} catch {
Write-Host "Error reading the file: $_"
}
Dans ce code :
- Nous créons une nouvelle instance de
System.IO.StreamReader
en utilisant[System.IO.StreamReader]::new($filePath)
, où$filePath
est le chemin vers le fichier. - Nous utilisons une boucle
while
pour lire le fichier ligne par ligne. La condition$reader.Peek() -ge 0
assure que nous continuons à lire jusqu’à ce que la fin du fichier soit atteinte. - À l’intérieur de la boucle, nous utilisons
$reader.ReadLine()
pour lire chaque ligne et la traiter selon les besoins. Dans cet exemple, nous affichons simplement chaque ligne en utilisantWrite-Host
, mais vous pouvez effectuer toutes les actions souhaitées. - Enfin, nous fermons le
StreamReader
en utilisant$reader.Close()
pour libérer les ressources du fichier.
Exemple complet de code fonctionnel
Voici un exemple complet de code fonctionnel qui lit un fichier ligne par ligne et affiche chaque ligne :
powershellCopy code# Specify the path to the file
$filePath = "example.txt"
# Check if the file exists
if (Test-Path $filePath) {
try {
# Create a StreamReader to read the file
$reader = [System.IO.StreamReader]::new($filePath)
# Read the file line by line
while ($reader.Peek() -ge 0) {
$line = $reader.ReadLine()
# Process each line here
Write-Host $line
}
# Close the StreamReader
$reader.Close()
} catch {
Write-Host "Error reading the file: $_"
}
} else {
Write-Host "File not found: $filePath"
}
Dans ce code :
- Nous spécifions le chemin vers le fichier en utilisant la variable
$filePath
. - Nous vérifions si le fichier existe en utilisant
Test-Path
. - Si le fichier existe, nous créons une instance de
System.IO.StreamReader
pour lire le fichier ligne par ligne et traiter chaque ligne en utilisant une bouclewhile
. - Nous incluons la gestion des erreurs pour capturer toute exception qui pourrait survenir lors de la lecture du fichier.
Conclusion
En résumé, PowerShell fournit plusieurs méthodes polyvalentes pour lire des fichiers ligne par ligne, répondant à divers besoins en matière de scripts et d’automatisation. Get-Content
avec une boucle ForEach
est un choix convivial pour des tâches simples, offrant simplicité et lisibilité. Get-Content
avec Foreach-Object
améliore la flexibilité, le rendant adapté à des opérations plus complexes et à des tâches de filtrage au sein du pipeline.
Pour des scénarios nécessitant un contrôle accru et une gestion des erreurs complète, la classe [System.IO.File]
offre une solution puissante. Cette méthode vous permet de peaufiner les opérations sur les fichiers et de gérer les exceptions avec grâce, la rendant bien adaptée pour des scripts robustes et résistants aux erreurs.
Dans les situations où vous traitez de grands fichiers et où l’efficacité de la mémoire est cruciale, la classe System.IO.StreamReader
est mise en avant. Elle permet de lire des fichiers de manière efficace tout en gérant les ressources mémoire plus efficacement, garantissant ainsi un traitement fluide de jeux de données substantiels.
En fin de compte, le choix de la méthode dépend de vos exigences spécifiques en matière de script, de la taille du fichier et de la complexité du traitement. En utilisant ces méthodes, vous pouvez lire des fichiers ligne par ligne dans PowerShell en répondant efficacement à un large éventail de tâches liées aux fichiers dans vos flux de travail d’automatisation.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedInArticle connexe - PowerShell File
- Comment créer un fichier texte en utilisant Windows PowerShell
- Comment débloquer des fichiers en utilisant PowerShell
- Comment obtenir la taille d'un fichier en Ko en utilisant PowerShell
- Comment obtenir la version du fichier dans PowerShell
- Comment stocker le contenu d'un fichier texte dans une variable en utilisant PowerShell
- Comment télécharger des fichiers avec FTP dans PowerShell