====== Add-Log - Ajouter des messages dans un fichier log et dans la console ====== --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2019/11/29 09:18// La gestion des inscriptions dans un fichier log ou l'affichage d'information dans la console sont des étapes cruciales dans un script. L'affichage console permet à un administrateur de savoir ce qu'il se passe en temps réel et les logs, après coup. Il est donc important d'inscrire et d'afficher les informations lorsque c'est nécessaire. C'est le but de cette fonction. ===== Script ===== # Fonction d'écriture de log dans un fichier et/ou dans la console Function Add-Log() { <# .SYNOPSIS Fonction d'écriture de log dans un fichier et/ou dans la console. .DESCRIPTION Cette Cmdlet enregistre une information horodatée dans le fichier spécifié. L'information est précédée d'une étiquette précisant son degré d'importance. .PARAMETER Type Précise le degré d'importance du message à enregistrer. Les valeurs possibles sont INFO, GOOD, WARN, CRIT et UNKN. .PARAMETER Message Indique le texte à enregistrer. .PARAMETER Line Enregistre une ligne (séparation) dans le fichier de log. .PARAMETER LogFile Chemin du fichier log dans lequel enregister les informations. .PARAMETER Out Indique où doit être inscrit les logs : LogFile : le message est inscrit uniquement dans le fichier log indiqué. Console : le message est affiché uniquement dans la console. Une coloration syntaxique sera associé au niveau type de message. Both : le message est à la fois inscrit dans le fichier log et affiché dans la console. .EXAMPLE Add-Log -LogFile C:\test.log -Type INFO -Message "Ceci est un test" -Out LogFile Exécuté le 21/09/2012 à 13h24.57, cette commande ajoutera dans le fichier C:\test.log, une ligne sous le format : 21/09/2012 13:24:57 INFO Ceci est un test .EXAMPLE Add-Log -LogFile C:\test.log -Line -Out LogFile Ajoute une ligne dans le fichier C:\test.log .INPUTS Pas de pipeline. Seulement les arguments nommés. .OUTPUTS Affichage console avec le paramètre -Out (Console ou Both) Ajout de données dans un fichier spécifié avec le paramètre -Out (LogFile ou Both) .NOTES Crée par Nicolas THOREZ, Shyrka System .LINK https://www.shyrkasystem.com #> Param ( # Type de Message [Parameter(Mandatory = $false, ValueFromPipeline = $false)] [ValidateSet("INFO", "GOOD", "CRIT", "WARN", "UNKN")] [string]$Type, # Message à enregistrer et/ou afficher [Parameter(Mandatory = $false, ValueFromPipeline = $false)] [string]$Message, # Switch pour demander de tracer une ligne (séparation) dans le log [Parameter(Mandatory = $false, ValueFromPipeline = $false)] [switch]$Line, # Fichier dans lequel enregistrer les logs [Parameter(Mandatory = $true, ValueFromPipeline = $false)] [string]$LogFile, # Mode de sortie (log, console ou les deux) [Parameter(Mandatory = $true, ValueFromPipeline = $false)] [ValidateSet("LogFile", "Console", "Both")] [string]$Out ) # On teste si le fichier existe sinon on le crée If (-not (Test-Path -Path $LogFile)) { New-Item -Path $LogFile -ItemType File | Out-Null } If ($Line) { # Si on a activer le switch -Line, on ajoute une ligne dans le fichier log un ligne If ($Out -ne "LogFile") { # On affiche dans la console Write-Host "----------------------------------------------------------------------" } If ($Out -ne "Console") { # On inscrit dans le fichier log Add-Content -Path $LogFile -Value "----------------------------------------------------------------------" } } Else { # Sinon, on traite le message $CheckTime = Get-Date -Format G If ($Out -ne "LogFile") { # On affiche le message avec une certaine coloration syntaxique Switch ($Type) { "INFO" { $Color = "cyan" } "GOOD" { $Color = "green" } "WARN" { $Color = "yellow" } "CRIT" { $Color = "red" } "UNKN" { $Color = "magenta" } } Write-Host "$CheckTime " -NoNewline Write-Host "$type " -NoNewline -ForegroundColor $Color Write-Host $Message } If ($Out -ne "Console") { Add-Content -Path $LogFile -Value "$CheckTime $Type $Message" } } } ===== Exemple ===== ==== Cas n°1 ==== Les commandes suivantes : Add-Log -LogFile C:\Temp\Test.log -Type INFO -Message "Ceci est un message d'information" -Out LogFile Add-Log -LogFile C:\Temp\Test.log -Type WARN -Message "Ceci est un avertissement" -Out LogFile Add-Log -LogFile C:\Temp\Test.log -Type CRIT -Message "Ceci est une alerte critique" -Out LogFile vont ajouter des informations dans le fichier ''C:\Temp\Test.log''. La lecture de ce fichier donnera : 29/11/2019 10:06:07 INFO Ceci est un message d'information 29/11/2019 10:06:07 WARN Ceci est un avertissement 29/11/2019 10:06:09 CRIT Ceci est une alerte critique ==== Cas n°2 ==== En ajoutant l'affichage console : Add-Log -LogFile C:\Temp\Test.log -Type INFO -Message "Ceci est un message d'information" -Out Both Add-Log -LogFile C:\Temp\Test.log -Type WARN -Message "Ceci est un avertissement" -Out Both Add-Log -LogFile C:\Temp\Test.log -Type CRIT -Message "Ceci est une alerte critique" -Out Both On obtient dans le fichier log : 12/12/2019 10:09:11 INFO Ceci est un message d'information 12/12/2019 10:09:11 WARN Ceci est un avertissement 12/12/2019 10:09:11 CRIT Ceci est une alerte critique et dans la console : {{ :powershell:add-log_001.png |}} ~~DISCUSSION~~