Add-Log - Ajouter des messages dans un fichier log et dans la console

CréationNicolas 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.

# 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"
        }
    }
}

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

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 :

Entrer votre commentaire. La syntaxe wiki est autorisée:
 
  • powershell_addlog.txt
  • Dernière modification : 2021/03/05 16:09
  • de nekan