L’enregistrement dans de simples fichiers texte est pratique pour suivre rapidement l’activité de vos scripts PowerShell. Que vous déboguiez un script complexe ou souhaitiez simplement conserver une trace des actions effectuées, ces méthodes peuvent s’avérer très utiles. Attention cependant : les méthodes par défaut sont assez basiques et ne comprennent ni horodatage ni fonctionnalités avancées, ce qui peut parfois donner un résultat peu clair. Elles restent néanmoins pratiques pour des journaux rapides et fonctionnels, notamment si vous travaillez dans l’urgence ou pour des scripts simples.
- Redirection de la sortie du terminal PowerShell vers un fichier journal
- Ajout d’une fonction de journalisation à un script PowerShell
- Journalisation automatique de PowerShell avec Start-Transcript
Redirection de la sortie du terminal PowerShell vers un fichier journal
La méthode la plus simple pour récupérer la sortie d’une commande consiste à utiliser des opérateurs comme `g` >>ou des commandes comme ` Add-Contentg` et `g` Out-File. Ces méthodes sont rapides, mais elles ne conservent ni l’horodatage ni le contexte ; c’est assez rudimentaire, mais suffisant pour garder une trace de commandes spécifiques.
- La redirection avec
>>ajout de la sortie directement dans un fichier journal, par exemple,
Write-Output "Files are successfully created in $env:COMPUTERNAME" >> C:\PS\Logs\TestLog.txt
- Remarque : Vous pouvez utiliser cette fonction
Set-Contentpour écraser le fichier à chaque exécution si nécessaire.
Autrement, Add-Contentc’est la même chose >>, mais cela peut être programmé plus facilement :
Add-Content -Path C:\PS\Logs\TestLog.txt -Value "Files are successfully created in $env:COMPUTERNAME"
Et si vous voulez faire plus sophistiqué (ou simplement rediriger la sortie standard dans un script), vous pouvez faire
Some-Command | Out-File -FilePath C:\PS\Logs\TestLog.txt -Append
Chacune de ces lignes ajoute simplement le résultat de la commande au journal. C’est assez simple, mais attention : elles ne gèrent pas l’horodatage ni les entrées multiples, sauf si vous prévoyez cela dans un script séparé.
Set-Contentles données précédentes seront effacées ; utilisez donc cette fonction avec précaution :
Set-Content -Path C:\PS\Logs\TestLog.txt -Value "New log start at $(Get-Date)"
Un petit bémol : ces méthodes n’ajoutent pas automatiquement d’horodatage. Il arrive donc que l’on se demande quand une action a été enregistrée. Si cela vous préoccupe, la méthode suivante est probablement plus appropriée.
Ajout d’une fonction de journalisation à un script PowerShell
C’est la méthode la plus élégante si vous utilisez des scripts et souhaitez des journaux horodatés, ce qui est quasiment indispensable pour le dépannage. Concrètement, il suffit d’ajouter une petite fonction qui intègre un horodatage et un message à votre fichier journal, ce qui rend le tout plus clair et plus professionnel (enfin, presque).
Voici un exemple rapide que vous pouvez copier-coller dans votre script (il vous suffit de modifier le chemin à votre convenance) :
$LogFile = "C:\PS\Logs\$($env:COMPUTERNAME)_posh.log" function Write-Log { Param ([string]$LogString) $Stamp = (Get-Date).ToString("yyyy/MM/dd HH:mm:ss") $LogMessage = "$Stamp $LogString" Add-Content -Path $LogFile -Value $LogMessage -Encoding UTF8 }
En quoi est-ce utile ? Eh bien, chaque message est désormais horodaté, et vous pouvez l’intégrer Write-Log "message"facilement dans votre script, ce qui simplifie grandement le suivi des événements. C’est très pratique, surtout pour les scripts longs où le suivi de la progression est crucial.
Exemple d’utilisation :
Write-Log "Script started" # do work Write-Log "Calculating..." Start-Sleep -Seconds 20 # more work Write-Log "Script completed"
Ainsi, votre fichier journal se remplit d’entrées horodatées, ce qui rend le débogage ou la révision beaucoup moins confus.
Si vous souhaitez suivre l’évolution des bûches, vous pouvez exécuter :
Get-Content -Path $LogFile -Tail 10 -Wait
Ce flux vidéo affiche les 10 dernières entrées en temps réel, ce qui est très pratique pour suivre la progression en direct.
Journalisation automatique de PowerShell avec Start-Transcript
Passons maintenant à la méthode intégrée, du genre « configurer et oublier ».PowerShell Start-Transcriptcapture tout (commandes exécutées, résultats, erreurs) et enregistre le tout dans un seul fichier journal. C’est idéal lorsque vous ne souhaitez pas vous embêter à écrire vos propres fonctions de journalisation ou à rediriger manuellement la sortie.
Pour démarrer l’enregistrement, il suffit d’exécuter :
Start-Transcript -Path C:\PS\Logs\MyTranscript.txt
Toutes les commandes et tous les résultats seront enregistrés jusqu’à ce que vous exécutiez :
Stop-Transcript
Sur certaines configurations, ce service peut être un peu instable ou ne pas démarrer du tout sans droits d’administrateur, mais en général, il est extrêmement fiable. Vous pouvez également indiquer un dossier spécifique en utilisant -Path.
Si vous souhaitez ajouter des journaux au lieu de les écraser, ajoutez simplement-Append :
Start-Transcript -Path C:\PS\Logs\PSScriptLog.txt -Append
C’est utile si vous exécutez plusieurs scripts qui écrivent tous dans le même journal.
De plus, vous pouvez les intégrer dans vos scripts : démarrez la transcription au début, faites votre travail, puis arrêtez-la à la fin, ce qui vous donne un compte rendu complet de tout ce qui s’est passé pendant l’exécution.
Et si vous craignez de manquer des journaux, il existe un paramètre de stratégie de groupe sous Configuration ordinateur > Modèles d’administration > Composants Windows > Windows PowerShell : Activer la transcription PowerShell. Une fois activé, ce paramètre permet à Windows d’enregistrer automatiquement toute l’activité PowerShell, sans avoir à écrire de script. Vous pouvez également modifier les paramètres du registre si vous êtes aventureux, mais honnêtement, l’option de stratégie de groupe est la solution la plus simple dans la plupart des cas.
En résumé, que vous souhaitiez une simple redirection, des fonctions de journalisation pratiques ou des transcriptions complètes, PowerShell vous offre des solutions. La meilleure méthode dépend de vos besoins : journaux rapides, horodatages détaillés ou historique complet des commandes.