PowerShell Write to File : "Out-File" et techniques de sortie de fichier
Nov 21, 2024
La sortie de PowerShell va par défaut dans la console, mais vous pouvez rediriger les résultats vers des fichiers pour la journalisation, les rapports, l'automatisation ou le dépannage. La cmdlet Out-File offre un contrôle complet sur l'encodage, la largeur de ligne et le comportement d'écrasement, tandis que les opérateurs de redirection (>, >>) sont plus rapides pour des tâches simples. Des alternatives comme Set-Content, Add-Content, ou même Export-Csv/ConvertTo-Json sont préférables lorsque vous avez besoin de données structurées. Utilisez -Append , -NoClobber, Test-Path, et la redirection d'erreurs (2>, 3>) pour gérer les journaux en toute sécurité.
Introduction à l'Outputting dans PowerShell
Toute personne familière avec PowerShell sait que le résultat des commandes PowerShell est affiché dans le terminal par défaut. Cependant, il peut y avoir des situations où vous souhaiteriez rediriger ou enregistrer le résultat dans un fichier.
- Les commandes peuvent renvoyer une grande quantité de données difficile à gérer en temps réel. Vous pouvez rediriger ou enregistrer ces données pour les traiter ou les examiner à votre convenance.
- Pour utiliser les résultats d'une commande dans un autre processus ou script, vous pouvez utiliser la commande PowerShell output to file pour sauvegarder la sortie dans un fichier ou une variable pour une réutilisation facile.
- Les tâches planifiées ou autres tâches automatisées s'exécutent généralement en arrière-plan. Vous pourriez ne pas être en mesure de voir le résultat en temps réel, donc l'enregistrer vous permet de le consulter ultérieurement.
- Parfois, le résultat peut contenir plus d'informations que nécessaire. Vous pouvez donc le rediriger ou l'enregistrer pour le filtrer et le formater.
- Lorsque vous exécutez des commandes sur des systèmes distants, il se peut que vous n'ayez pas accès à la console pour voir la sortie en temps réel. Enregistrer ou rediriger vous fournit un enregistrement de ce qui s'est passé sur le système distant.
- Les organisations génèrent des rapports basés sur les états des systèmes, les configurations ou les métriques de performance. En utilisant PowerShell, elles peuvent interroger les données du système, générer des rapports et les exporter dans un fichier pour un examen futur.
- PowerShell peut être utilisé pour rassembler des informations d'inventaire matériel et logiciel pour la gestion des actifs et la conformité. Ces données peuvent ensuite être exportées vers un fichier pour une meilleure visibilité et une gestion simplifiée.
- Lors de l'automatisation des tâches, il est essentiel de suivre les actions effectuées et les résultats. Rediriger la sortie vers un fichier aide à créer des journaux pour l'audit.
- Si un script échoue, vous devez connaître la cause principale. En sauvegardant la sortie, vous pouvez la revoir plus tard pour la gestion des erreurs, le débogage et le dépannage.
En bref, rediriger ou enregistrer la sortie de PowerShell augmente la productivité, aide au débogage, fournit des journaux utiles et facilite l'automatisation, en particulier dans les flux de travail complexes ou lors du travail avec de grands ensembles de données.
Plus de contenu PowerShell que vous pourriez aimer :
Méthodes principales pour exporter les résultats de PowerShell dans des fichiers
Le Cmdlet Out-File
La méthode PowerShell pour écrire dans un fichier texte utilise couramment le cmdlet Out-File pour envoyer les résultats des commandes (sortie) directement dans un fichier. Dans sa forme la plus simple, Out-File nécessite de spécifier un chemin et un nom de fichier pour écrire la sortie.
Par défaut, le cmdlet remplace un fichier existant si un fichier portant le même nom existe dans le chemin spécifié, ou en crée un nouveau s'il n'existe pas.
Syntaxe Out-File
Voici la syntaxe de base pour la cmdlet Out-File :
Out-File
[-FilePath] <cadena>
[[-Encoding] <Encoding>]
[-Append]
[-Force]
[-NoClobber]
[-Width <int>]
[-NoNewline]
[-InputObject <psobject>]
[-WhatIf]
[-Confirmar]
[<CommonParameters>]
Paramètres
La cmdlet PowerShell Out-File accepte les paramètres suivants :
Paramètre | Description |
|---|---|
|
-Filepath |
Définit le chemin et le nom du fichier de sortie |
|
-Encodage <Encoding> |
Définit l'encodage pour le fichier de sortie. Les options incluent ASCII, UTF8, UTF7, Unicode, etc. La valeur par défaut est utf8NoBOM. |
|
-Ajouter |
Ajoute la sortie à la fin du fichier sans écraser le contenu existant |
|
-Force |
Ignore l'attribut en lecture seule et écrase un fichier existant en lecture seule. Ce paramètre ne remplace pas les restrictions de sécurité. |
|
-NoClobber |
Empêche l'écrasement d'un fichier existant. Par défaut, si un fichier existe dans le chemin spécifié, la cmdlet Out-File réécrit le fichier sans avertissement. |
|
-Largeur |
Limite le nombre de caractères par ligne dans le fichier de sortie (par défaut 80). Les caractères supplémentaires sont tronqués, pas renvoyés à la ligne. |
|
-NoNewLine |
Indique que le contenu écrit dans le fichier de sortie ne se termine pas par un caractère de nouvelle ligne. Aucun espace ou saut de ligne n'est inséré entre les chaînes de sortie et aucun saut de ligne n'est ajouté après la dernière chaîne de sortie. |
|
-InputObject |
Spécifie les objets à écrire dans le fichier. Tapez une commande ou une expression qui récupère les objets ou entrez une variable qui contient les objets. |
|
-WhatIf |
Exécute le cmdlet en mode test pour afficher les résultats attendus du cmdlet |
|
-Confirmer |
Demande de confirmation avant d'exécuter le cmdlet |
Cas d'utilisation
Pour écrire directement la sortie dans un fichier plutôt que de l'afficher à l'écran, vous pouvez utiliser l'approche PowerShell d'écriture de sortie dans un fichier en ajoutant le cmdlet Out-File à une commande ou une variable PowerShell. Cette technique fonctionne également pour écrire une chaîne de texte dans un fichier en ajoutant directement Out-File à la chaîne.
Ajoutez Out-File à un cmdlet PowerShell
Pour récupérer une liste des processus en cours et utiliser la méthode de sauvegarde de sortie PowerShell dans un fichier, enregistrez la sortie dans un fichier texte nommé « Processes » dans le dossier C:\Temp avec l'exemple suivant :
Get-Process | Out-File -FilePath C:\Temp\processes.txt
Ici, le cmdlet Get-Process listera tous les processus en cours d'exécution. Avec la fonctionnalité de PowerShell pipe output to file, vous pouvez prendre la sortie d'une commande et l'enregistrer immédiatement dans un fichier texte pour une analyse ultérieure.
Ajoutez Out-File à une chaîne de texte
Pour écrire une chaîne en utilisant la méthode PowerShell d'écriture de chaîne dans un fichier, comme ajouter « Hello, World! » à un fichier texte nommé « Test » à l'emplacement C:\Temp, utilisez le cmdlet suivant :
"Bonjour, Monde !" | Out-File -FilePath C:\Temp\Test.txt
Si le fichier n'existe pas, il sera créé. S'il existe déjà, le contenu sera écrasé par défaut.
Ajoutez Out-File à une variable
Vous pouvez également utiliser le cmdlet Out-File avec une variable. Par exemple :
$variable | Out-File -FilePath "C:\path\to\file.txt"
Ici $variable est la variable qui contient les données (par exemple, une sortie PowerShell vers un fichier texte ou une sortie de commande) que vous souhaitez envoyer à un fichier.
Opérateurs de redirection (> et >>)
Les opérateurs de redirection (> et >>) dans PowerShell constituent une alternative simple et rapide au cmdlet Out-File, vous permettant de rediriger la sortie vers un fichier.
- L'opérateur > est équivalent au cmdlet Out-File sans paramètres supplémentaires. Il écrase le fichier s'il existe, ou en crée un nouveau s'il n'existe pas.
- L'opérateur >> est équivalent à Out-File -Append. Il ajoute la sortie au fichier s'il existe, ou crée un nouveau s'il n'existe pas.
Ces opérateurs ont également d'autres utilisations telles que la redirection des flux de sortie d'erreur ou verbeux, ce qui dépasse le cadre de cet article.
Syntaxe de base
La syntaxe de base pour utiliser les opérateurs est la suivante :
<Command> > <Path> # Écrase
<Command> >> <Path> # Ajoute à la suite
Remarquez que les opérateurs de redirection n'utilisent aucun paramètre.
Exemple 1 – Utilisation de l'opérateur >
Cette cmdlet écrit la sortie de Get-Process dans le fichier Processes.txt, en écrasant tout contenu existant au cas où un fichier portant ce nom existe déjà à la destination.
Get-Process > C:\Temp\Processes.txt
Exemple 2 – Utilisation de l'opérateur >>
Cette cmdlet ajoute la date et l'heure actuelles à la fin du fichier log.txt sans écraser le contenu existant.
Get-Date >> C:\Temp\log.txt
Si un fichier nommé log.txt n'existe pas au chemin spécifié, il crée le fichier et y écrit la date et l'heure actuelles.
Cmdlet Out-File versus les opérateurs de redirection (> et >>)
Le cmdlet Out-File et les opérateurs de redirection peuvent tous deux écrire et ajouter la sortie de PowerShell dans un fichier. Les principales différences entre les deux sont discutées ci-dessous.
Fonctionnalité | Cmdlet Out-File | Opérateurs de redirection (> et >>) |
|---|---|---|
|
Paramètres |
Accepte les paramètres |
N'accepte pas de paramètres |
|
Comportement d'écrasement |
La valeur par défaut est d'écraser ; utilisez -Append pour ajouter et -NoClobber pour éviter d'écraser |
> écrase, >> ajoute à la suite Pas de contrôle intégré pour empêcher l'écrasement |
|
Contrôle de l'encodage |
Permet de spécifier l'encodage avec -Encoding |
Contrôle limité de l'encodage (UTF-8 dans PowerShell 6+, Unicode dans les versions antérieures) |
|
Contrôle de la largeur |
Prend en charge le réglage de la largeur de ligne avec -Width |
Aucun contrôle sur la largeur de ligne |
|
Gestion des erreurs |
Seuls les résultats réussis sont exportés, donc les avertissements ou erreurs ne sont pas inscrits dans le fichier |
Vous pouvez spécifier quel flux vous souhaitez exporter, comme succès, erreur, avertissement, etc. |
|
Utilisation dans les scripts |
Idéal pour les scripts nécessitant plus de contrôle sur le résultat |
Rapide et pratique pour une simple redirection |
Quand utiliser chacun
En comparaison, le cmdlet Out-File est plus polyvalent et idéal pour les scripts complexes, avec des options pour l'encodage, la largeur et le contrôle de l'écrasement. Les opérateurs de redirection, cependant, sont rapides et pratiques pour les travaux de sortie rapides qui ne nécessitent pas de personnalisation. Voici un bref guide sur le moment où vous devriez utiliser chacun.
Quand utiliser la cmdlet Out-File
- Pour un encodage spécifique (par exemple, ASCII, UTF8, Unicode)
- Pour éviter d'écraser les fichiers (en utilisant -NoClobber)
- Pour contrôler la largeur de ligne de la sortie (en utilisant -Width)
- En mode ajout tout en conservant les autres options de contrôle de sortie
Quand utiliser > et >>
- Lorsque vous souhaitez une redirection rapide de la sortie sans mise en forme ni codage supplémentaires
- Lorsqu'on souhaite écraser (>) ou ajouter (>>) au fichier existant
Tutoriel de script Windows PowerShell (PDF) pour les débu
Techniques avancées de sortie de fichiers
Gérer les écrasements
Par défaut, la cmdlet Out-File écrase un fichier existant si un fichier du même nom existe dans le chemin spécifié, ou crée un nouveau fichier s'il n'existe pas.
Pour éviter d'écraser un fichier existant, vous pouvez utiliser la méthode d'ajout à l'écriture dans un fichier PowerShell de deux manières :
- Ajoutez (annexez) la sortie au fichier existant
- Empêchez l'écrasement, de sorte que le fichier existant ne sera pas remplacé et que la sortie ne sera pas enregistrée dans le fichier
Ajouter la sortie
Utilisez le paramètre -Append avec le cmdlet Out-File pour ajouter la nouvelle sortie à la fin du fichier spécifié sans écraser son contenu existant. Cela est particulièrement utile lorsque, par exemple, vous souhaitez enregistrer des événements de manière incrémentielle sans perdre les données précédentes.
Cette commande ajoute les cinq entrées les plus récentes du journal Système au fichier event_log.txt.
Get-EventLog -LogName System -Newest 5 | Out-File -FilePath C:\Temp\event_log.txt -Append
Vous pouvez également utiliser l'opérateur de redirection >> pour ajouter des sorties à un fichier existant. Dans l'exemple suivant, le statut et les détails des services sur votre machine locale sont ajoutés au contenu du fichier log.txt.
Get-Service >> C:\Temp\log.txt
Empêcher l'écrasement
Utilisez le paramètre -NoClobber avec le cmdlet Out-File pour éviter les écrasements. Ainsi, si un fichier portant le même nom existe à l'emplacement spécifié, PowerShell ne l'écrasera pas et générera une erreur. Cela aide à protéger les fichiers importants.
La commande suivante va essayer de créer un fichier nommé log.txt dans le dossier Temp. Mais si un fichier portant ce nom existe déjà, une erreur sera affichée et la sortie ne sera pas enregistrée dans le fichier.
Get-Service | Out-File -FilePath C:\Temp\log.txt -NoClobber
Forcer l'écrasement
Parfois, vous ne pouvez pas réécrire le contenu d'un fichier existant avec la sortie d'un cmdlet PowerShell, car le fichier est en lecture seule. Dans une situation comme celle-ci, utilisez le paramètre -Force avec le cmdlet Out-File pour réécrire les fichiers en lecture seule.
Cette cmdlet écrit les informations des services dans le fichier Services.txt, en s'assurant que si le fichier Services.txt existe déjà, il sera écrasé, même s'il est en lecture seule.
Get-Service | Out-File -FilePath C:\Temp\Services.txt -Force
Formatage et codage de sortie
Le cmdlet Out-File de PowerShell offre des options pour personnaliser le formatage et l'encodage de la sortie.
Formater la sortie
Le cmdlet Out-File peut ne pas afficher le résultat comme prévu, en particulier lorsque la sortie comporte plusieurs colonnes. Pour obtenir un résultat formaté et lisible, vous pouvez ajuster la largeur ou utiliser le cmdlet Format-Table.
Exemple 1 – Définissez la largeur
Utilisez le paramètre -Width avec Out-File pour spécifier la largeur de ligne du fichier de sortie (80 caractères est la valeur par défaut).
Cette cmdlet écrit les informations des services dans le fichier Services.txt, tout en définissant la largeur de ligne à 200 caractères. Cela permet une sortie plus large sans retour à la ligne.
Get-Service | Out-File -FilePath C:\Temp\Services.txt -Width 200
Exemple 2 – Formater avec Format-Table
Utilisez le cmdlet Format-Table pour structurer les données avant de les envoyer au cmdlet Out-File.
Cette cmdlet utilise Format-Table -AutoSize pour ajuster automatiquement la largeur des colonnes pour une meilleure lisibilité.
Get-Service | Format-Table -AutoSize | Out-File -FilePath C:\Temp\Services.txt
Définir l'encodage
L'encodage de la sortie dans PowerShell lors de l'utilisation de la cmdlet Out-File garantit que les données sont correctement interprétées, affichées et compatibles sur différents systèmes et applications.
Le paramètre -Encoding permet de spécifier comment le texte de sortie est encodé dans le fichier. Les types d'encodage courants incluent :
- UTF8 – Courant pour les applications web, prend en charge tous les caractères.
- ASCII – Limité aux caractères anglais de base, compact mais restrictif.
- Unicode (UTF-16) – Bon pour la compatibilité Windows, peut gérer une large gamme de caractères spéciaux, de symboles et de textes internationaux, mais utilise plus d'espace.
- Par défaut – Utilise l'encodage par défaut du système, qui peut varier et être imprévisible selon les plateformes.
Exemple 1 — Utilisez l'encodage UTF-8
Il est judicieux d'utiliser l'encodage UTF-8 si le fichier de sortie contient des caractères spéciaux ou si le fichier sera utilisé dans des environnements où UTF-8 est l'encodage standard.
Cette cmdlet récupère une liste des services sur le système et exporte les informations dans le fichier Services.txt tout en définissant l'encodage du fichier en UTF-8.
Get-Service | Out-File -FilePath C:\Temp\Services.txt -Encoding UTF8
Exemple 2 — Utilisez l'encodage ASCII
L'encodage ASCII est couramment utilisé pour les fichiers texte plus simples.
Cette cmdlet récupère une liste de services sur le système et transmet les sorties au fichier Services.txt. Le paramètre -Encoding est utilisé pour convertir la sortie au format ASCII.
Get-Service | Out-File -FilePath C:\Temp\Services.txt -Encoding ASCII
Gestion des flux de sortie spécifiques
Le cmdlet Out-File écrit le résultat réussi de votre commande ou script dans un fichier. Mais il n'écrit pas les erreurs, les avertissements ou certains types de messages dans les fichiers. Cela peut être réalisé avec l'opérateur de redirection, qui vous permet de spécifier quel flux vous souhaitez sortir dans un fichier.
Opérateur | Description / Flux | Écrivez cmdlet |
|---|---|---|
|
> |
Succès uniquement |
Write-Output |
|
2> |
Erreur uniquement |
Write-Error |
|
3> |
Avertissement uniquement |
Write-Warning |
|
4> |
Seulement verbeux |
Write-Verbose |
|
5> |
Débogage uniquement |
Write-Debug |
|
6> |
Information seulement |
Write-Information |
|
*> |
Tous |
|
Exemple 1 — Envoyer les messages d'erreur dans un fichier
Cette commande tente de lister (ls) un fichier nommé Readme. Elle recherche le fichier dans le répertoire courant si vous ne spécifiez pas de chemin. Si le fichier n'existe pas, elle génère un message d'erreur. L'opérateur 2> redirige cette erreur vers un fichier appelé error.log. En conséquence, l'erreur n'est pas affichée à l'écran mais enregistrée dans error.log dans le dossier Temp.
ls Readme 2> C:\Temp\error.log
Contenu connexe sélectionné :
Exemple 2 — Envoyer des avertissements au fichier
Dans PowerShell, le flux d'avertissement est le numéro de flux 3. Vous pouvez utiliser 3> pour rediriger les avertissements vers un fichier : Cela se fait comme suit :
# Commande qui génère un avertissement
<Your-Command> 3> C:\Temp\warning_log.txt
Méthodes alternatives pour la sortie
Cmdlets Set-Content et Add-Content
Les cmdlets Set-Content et Add-Content sont une autre manière d'écrire des sorties dans un fichier.
- Set-Content remplace le contenu existant dans le fichier par le nouveau contenu fourni. Si le fichier n'existe pas, il le crée.
- Add-Content ajoute du nouveau contenu à la fin du contenu existant du fichier. Si le fichier n'existe pas, il le créera, mais il ne remplacera pas le contenu existant.
La cmdlet Set-Content
Utilisez le cmdlet Set-Content pour écrire ou remplacer le contenu d'un fichier par un nouveau contenu.
Cette cmdlet remplace le contenu existant dans le fichier Test.txt. Le paramètre -Value spécifie le contenu ou le texte qui remplacera le contenu existant.
Set-Content -Path C:\Temp\Test.txt -Value "Ajoutez du contenu ici"
La cmdlet Add-Content
Utilisez la cmdlet Add-Content pour ajouter du contenu à un fichier, ce qui signifie que vous pouvez ajouter de nouvelles données à un fichier existant sans l'écraser. Add-Content peut également ajouter du contenu à plusieurs fichiers à la fois.
Tout comme le cmdlet Out-File et l'opérateur de redirection, le cmdlet Add-Content crée un nouveau fichier si un fichier portant le même nom n'existe pas.
Exemple 1 — Ajouter du texte à un fichier
Cette cmdlet ajoute un nouveau texte au fichier Test.txt. Le paramètre -Value spécifie le contenu ou le texte que vous souhaitez ajouter au fichier.
Add-Content -Path C:\Temp\Test.txt -Value "Nouvelle ligne à ajouter"
Si le fichier est en lecture seule, vous devez utiliser le paramètre -Force pour autoriser l'ajout de contenu.
Exemple 2 — Ajouter du texte à plusieurs fichiers
Pour ajouter le même contenu à plusieurs fichiers, vous avez plusieurs options.
- Utilisez des caractères génériques dans le chemin pour spécifier les fichiers que vous souhaitez mettre à jour
- Excluez les noms de fichiers que vous ne souhaitez pas mettre à jour
Cette cmdlet ajoute la date actuelle à tous les fichiers .txt dans le dossier Temp, sauf dans le fichier avec test dans le nom du fichier :
Add-Content -Path C:\Temp\files\*.txt -Value (Get-Date) -Exclude "test*"
Exemple 3 — Ajouter plusieurs lignes de texte
Cette commande ajoute plusieurs lignes de texte au fichier Test.txt.
$lines = @(
"Line 1: Details",
"Line 2: Specific Details"
)
Add-Content -Path C:\Temp\Test.txt -Value $lines
.Net Classes
Vous pouvez utiliser les classes .NET pour générer une sortie vers un fichier, en particulier dans des scénarios avancés impliquant la manipulation de grandes données. Ces classes sont :
- BinaryWriter – Écrit des types de données primitifs sous forme binaire dans un flux.
- StreamWriter – Utilisé pour écrire des caractères dans un flux avec un encodage spécifique. Souvent utilisé pour créer ou modifier des fichiers texte.
- StringWriter – écrit des informations dans une chaîne. Avec cette classe, PowerShell stocke les informations de chaîne dans un objet StringBuilder.
Utiliser la classe StreamWriter en C# pour envoyer des sorties vers un fichier est simple. L'exemple suivant montre comment vous pouvez l'utiliser.
# Get the directories in C:\
$Dirs = Get-ChildItem -Path C:\ -Directory
# Open a stream writer
$File = 'C:\Temp\Dirs.txt'
$Stream = [System.IO.StreamWriter]::new($File)
# Write the folder names for these folders to the file
foreach($Dir in $Dirs) {
$Stream.WriteLine($Dir.FullName)
}
# Close the stream
$Stream.Close()
Ce script effectue les étapes suivantes pour lister les répertoires sur le disque C:\ et enregistrer leurs chemins dans un fichier texte :
Étape 1 :
$Dirs = Get-ChildItem -Path C:\ -Directory
Cette ligne utilise Get-ChildItem avec le paramètre -Directory pour obtenir uniquement les répertoires (pas les fichiers) dans le lecteur C:\. Le résultat est stocké dans la variable $Dirs sous forme de liste d'objets de répertoire.
Étape 2 :
$File = 'C:\Temp\Dirs.txt'
$Stream = [System.IO.StreamWriter]::new($File)
Ces lignes configurent un chemin de fichier (C:\Temp\Dirs.txt) où la liste des répertoires sera sauvegardée, puis initialisent un objet StreamWriter pour écrire dans ce fichier. Cet objet est assigné à $Stream.
Étape 3 :
foreach($Dir in $Dirs) {
$Stream.WriteLine($Dir.FullName)
}
Cette boucle passe à travers chaque objet de répertoire dans $Dirs. Pour chaque répertoire, elle écrit le chemin complet ($Dir.FullName) dans le fichier en utilisant $Stream.WriteLine.
Étape 4 :
$Stream.Close()
Après avoir écrit tous les chemins d'accès des répertoires, le script ferme le StreamWriter.
Réservez une démo individuelle pour Netwrix Directory Manager:
Meilleures pratiques pour la sortie de fichier PowerShell
Définissez la largeur de ligne correcte pour éviter la troncature
Vous devriez définir la largeur de ligne correcte avec le paramètre -Width dans PowerShell pour éviter la troncature des lignes longues et garantir que les sorties de fichiers sont formatées comme prévu.
Le paramètre -Width dans le cmdlet Out-File contrôle le nombre maximal de caractères par ligne dans la sortie. Par défaut, il est défini à 80 caractères, ce qui peut tronquer les lignes plus longues. Vous pouvez, par exemple, augmenter la largeur à 200 caractères, comme montré ci-dessous :
Get-Process | Out-File -FilePath "output.txt" -Width 200
Considérez ce qui suit :
- Pour éviter les espaces blancs inutiles ou la troncature, définissez une -Width pour correspondre à la ligne la plus longue. Pour la plupart des sorties, une largeur de 120 à 200 caractères devrait bien fonctionner.
- Pour des données comportant de nombreuses colonnes (comme un fichier CSV), définissez une largeur plus grande pour accueillir la ligne complète.
- Dans un pipeline, utilisez Out-String -Width pour contrôler la largeur de ligne, en vous assurant que la ligne entière s'adapte à la largeur spécifiée avant de la transmettre à Out-File.
Définissez l'encodage approprié
L'encodage par défaut que PowerShell utilise varie en fonction du cmdlet et de la version de PowerShell que vous utilisez. Le tableau suivant montre l'encodage par défaut utilisé :
Cmdlet / Opérateur | PowerShell 5.1 (et versions antérieures) Encodage par défaut | Encodage par défaut de PowerShell Core / PowerShell 7+ |
|---|---|---|
|
Out-File, Set-Content, Add-Content |
UTF-16LE (Unicode) |
UTF-8 (No BOM) |
|
>, >> (Redirection) |
ASCII |
UTF-8 (No BOM) |
L'encodage UTF-8 est recommandé pour la compatibilité entre systèmes. Pour les systèmes hérités, cependant, vous pourriez vouloir spécifier -Encoding ASCII ou -Encoding Unicode.
Utilisez $PSDefaultParameterValues pour définir des valeurs par défaut dans les scripts
$PSDefaultParameterValues dans PowerShell vous permet de définir des valeurs par défaut pour les paramètres à travers des scripts et des sessions, offrant un moyen d'assurer la cohérence sans avoir à spécifier les options à plusieurs reprises.
Voici comment vous pouvez définir un paramètre global par défaut pour Out-File afin d'utiliser l'encodage UTF8 et une largeur plus grande.
$PSDefaultParameterValues["Out-File:Encoding"] = "UTF8"
$PSDefaultParameterValues["Out-File:Width"] = 200
Combinez Out-File avec Format-Table et Format-List pour une sortie mieux structurée
Combiner le cmdlet Out-File avec Format-Table ou Format-List est un excellent moyen de produire des fichiers de sortie de texte bien structurés et lisibles.
Format-Table
Format-Table est idéal pour les données ayant une structure claire en lignes et colonnes. Il crée un format organisé et facile à lire semblable à un tableau. Cependant, pour l'utiliser avec le cmdlet Out-File, considérez ce qui suit :
- Utilisez le paramètre -Property pour spécifier uniquement les colonnes dont vous avez besoin. Cela évitera l'encombrement dans le fichier de sortie.
- Utilisez le paramètre -AutoSize pour optimiser la largeur des colonnes afin qu'elles s'adaptent au contenu. Cela réduira l'espace blanc supplémentaire ou la troncature.
- Utilisez le paramètre -Width pour éviter la troncature et maintenir l'alignement de la sortie.
Voici un exemple :
Get-Process | Format-Table -Property Name, ID, CPU, WS -AutoSize | Out-File -FilePath "ProcessList.txt" -Width 200
Format-List
Format-List affiche les données verticalement, avec une propriété par ligne. Utilisez-le lorsque vous avez de nombreuses propriétés ou champs avec des valeurs longues, afin d'éviter la troncature de ces valeurs. Ce format convient pour les rapports et les journaux détaillés.
Voici un exemple d'utilisation de Format-List avec Out-File :
Get-Process | Format-List -Property Name, ID, CPU, StartTime | Out-File -FilePath "DetailedProcessList.txt"
Comme avec Format-Table, sélectionnez uniquement les propriétés dont vous avez besoin.
Prévenez les conflits de fichiers en utilisant Test-Path pour vérifier si les fichiers existent avant d'écrire
Il est toujours prudent de vérifier si un fichier existe avant de tenter d'y écrire. Ainsi, vous pouvez éviter les écrasements accidentels et décider de la marche à suivre lorsque le fichier existe déjà. La cmdlet Test-Path dans PowerShell vous permet de vérifier l'existence d'un fichier.
Voici les étapes à suivre :
- Affectez le chemin du fichier à une variable.
- Utilisez le cmdlet Test-Path pour vérifier si le fichier existe.
- Décidez si vous souhaitez ajouter, écraser, renommer ou ignorer l'écriture.
- Utilisez le cmdlet Out-File pour créer ou écrire dans le fichier.
Pièges courants et solutions
La cmdlet Out-File dans PowerShell peut parfois conduire à des pièges courants, notamment en ce qui concerne la manipulation des fichiers, l'encodage et l'ajout de contenu. Certains problèmes courants et leurs solutions sont discutés ci-dessous.
Évitez la perte de données par écrasement
Par défaut, le cmdlet Out-File écrase le contenu d'un fichier existant sans avertissement, si un fichier portant le même nom existe déjà. Certaines méthodes pour éviter cela sont :
- Ajoutez le résultat au fichier existant plutôt que de l'écraser en utilisant le paramètre -Append.
- Vérifiez si le fichier existe avec Test-Path et décidez de la manière de procéder avec Out-File.
Évitez la perte de données due à un encodage inapproprié
Par défaut, Out-File utilise l'encodage Unicode dans PowerShell 5.1 et les versions antérieures. Il utilise l'encodage UTF-8 dans PowerShell Core et les versions ultérieures.
L'encodage par défaut peut ne pas être compatible avec votre système ou les applications qui attendent un encodage différent. Par conséquent, vous devriez spécifier explicitement l'encodage en utilisant le paramètre -Encoding.
Gérez la sortie dans les scripts de longue durée pour garantir la performance
Dans des environnements contraints comme PowerShell ISE, l'exécution de scripts avec le cmdlet Out-File peut entraîner des problèmes tels que :
- Échec de la gestion des structures de données complexes comme prévu
- Troncature des sorties longues
Pour gérer les longues sorties, vous pouvez :
- Utilisez le paramètre -Width pour définir une largeur appropriée
- Exportez des données complexes vers des formats structurés tels que CSV ou JSON en utilisant les cmdlets Export-Csv ou ConvertTo-Json
Gérez la journalisation et la gestion des erreurs dans les scripts PowerShell
Parfois, un fichier est utilisé ou verrouillé par un autre processus. Dans ce cas, le cmdlet Out-File générera une erreur car il ne pourra pas écrire dessus. Vous pouvez gérer cette erreur et d'autres avec un bloc try/catch. Voici un exemple :
$content = "Write content to file"
$filePath = "C:\Temp\Errors.txt"
try {
$content | Out-File -FilePath $filePath
Write-Host "File written successfully."
} catch {
Write-Host "File is in use or locked by another process."
}
FAQ
Partager sur
En savoir plus
À propos de l'auteur
Tyler Reese
Vice-président de la gestion de produit, CISSP
Avec plus de deux décennies d'expérience dans l'industrie de la sécurité logicielle, Tyler Reese connaît intimement les défis d'identité et de sécurité en rapide évolution auxquels les entreprises sont confrontées aujourd'hui. Actuellement, il occupe le poste de directeur de produit pour le portefeuille Netwrix Identity and Access Management, où ses responsabilités incluent l'évaluation des tendances du marché, la définition de la direction de la gamme de produits IAM et, en fin de compte, la satisfaction des besoins des utilisateurs finaux. Son expérience professionnelle s'étend de la consultation en IAM pour des entreprises du Fortune 500 à l'architecture d'entreprise d'une grande société de vente directe aux consommateurs. Il détient actuellement la certification CISSP.
En savoir plus sur ce sujet
Supprimer le fichier avec Powershell s'il existe
Comment créer de nouveaux utilisateurs Active Directory avec PowerShell
Comment exécuter un script PowerShell
Qu'est-ce que PowerShell ? Un guide complet de ses fonctionnalités et utilisations
Maîtriser PowerShell Sleep pour la gestion de scripts