Powershell - Création de logs pour votre programme
Date de publication : January 4, 2025
Temps de lecture estimé : 3 minutes
Auteur : Axel Agnan
Créer le fichier de log
Nous allons créer une fonction nommée CreationFichierLog.
Function CreationFichierLog
{
}
Dans un premier temps, nous allons assigner un nom à notre fichier :
$nomFichier = "fichierLog.log"
Puis tenter la création du fichier via un Try Catch :
Try {
New-Item -type file $nomFichier -Force
}
catch {
Write-Host "Impossible de créer le fichier log" -ForegroundColor Red
Write-Host $_ # Affiche le message d'erreur généré par Powershell
}
Et retourner le nom du fichier nouvellement créé :
return $nomFichier
La structure finale de notre fonction est la suivante :
Function CreationFichierLog
{
$nomFichier = "fichierLog.log"
Try {
New-Item -type file $nomFichier -Force
}
catch {
Write-Host "Impossible de créer le fichier log" -ForegroundColor Red
Write-Host $_ # Affiche le message d'erreur généré par Powershell
}
return $nomFichier
}
Ecrire dans le fichier de log
La prochaine étape consiste à écrire dans le fichier de log.
Dans cette fonction, nous allons créer des paramètres permettant d’indiquer si nous voulont aussi une sortie console via le Write-Host ainsi que le niveau du message (Alerte, Erreur etc…)
Création de la fonction WriteLog :
Function WriteLog
{
}
Ajout des paramètres pour sélectionner le niveau, le debug console et le message à écrire :
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True)]$fichier,
[Parameter(Mandatory=$True)][Bool]$mode,
[Parameter(Mandatory=$True)][String]$niveau,
[Parameter(Mandatory=$True)][String]$message
)
Et enfin, le code pour écrire dans le fichier :
switch($niveau)
{
"alerte" {
$Stamp = (Get-Date).toString("dd/MM/yyyy HH:mm:ss")
if($mode -eq $True)
{
Write-Host $Message -ForegroundColor "Yellow"
}
Add-Content $fichierLog -Value "<$Stamp> <warn> $Message"
}
"erreur" {
$Stamp = (Get-Date).toString("dd/MM/yyyy HH:mm:ss")
if($mode -eq $True)
{
Write-Host $Message -ForegroundColor "Red"
}
Add-Content $fichierLog -Value "<$Stamp> <error> $Message"
}
}
Une explication concernant les paramètres s’impose :
- le paramètre $fichier représente le nom du fichier précédemment créé.
- Le paramètre $mode prend uniquement un booléen comme valeur. Dans notre code, si le mode est True, alors nous écrirons un retour dans la console.
- Concernant le paramètre $niveau, celui-ci accepte n’importe quel string du moment que sa valeur est présente dans le switch.
- Enfin, le paramètre $message représente le message à écrire dans le log et dans la console, il faut lui donner un string également.
Lors de l’affichage du message en mode console, une couleur d’arrière plan est utilisée via le paramètre -ForeGroundColor.
La fonction complète est donc :
Function WriteLog
{
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True)][Bool]$mode,
[Parameter(Mandatory=$True)][String]$niveau,
[Parameter(Mandatory=$True)][String]$message
)
switch($niveau)
{
"alerte" {
$Stamp = (Get-Date).toString("dd/MM/yyyy HH:mm:ss")
if($mode -eq $True)
{
Write-Host $Message -ForegroundColor "Yellow"
}
Add-Content $global:fichierLog -Value "<$Stamp> <warn> $Message"
}
"erreur" {
$Stamp = (Get-Date).toString("dd/MM/yyyy HH:mm:ss")
if($mode -eq $True)
{
Write-Host $Message -ForegroundColor "Red"
}
Add-Content $global:fichierLog -Value "<$Stamp> <error> $Message"
}
}
}