-
01 - Introduction à Powershell
-
02 - Commandes de base Powershell
-
03 - Navigation dans le système
-
04 - Gestion des utilisateurs locaux
-
05 - Les bases du scripting Powerhshell
-
06 - Gestion des utilisateurs Active Directory
-
07 - Automatisation des taches de gestion utilisateurs
-
08 - Automatisation des processus système
-
09 - Script de maintenance serveur
-
10 - Gestion avancée en PowerShell
-
11 - Formater les sorties des scripts
-
12 - Gestion des fichiers de log
-
13 - Etude de cas - Automatisation de taches courantes
-
14 - Optimisation des scripts et bonnes pratiques
-
16 - Algorithmie et Powershell
-
QCM de fin de parcours
12.2 Exportation des données pour le reporting
2. Exportation des données pour le reporting
2.1. Analyser les logs avec PowerShell
2.1.1. Compter les erreurs dans un log
# Compter le nombre d'erreurs dans un fichier de log
$logFile = "C:\Logs\ScriptLog_20251110.log"
$errorCount = (Get-Content -Path $logFile | Where-Object { $_ -match '\[ERROR\]' }).Count
Write-Host "Nombre d'erreurs : $errorCount"
Explications :
- -match '\[ERROR\]' : Filtre les lignes contenant [ERROR].
2.1.2. Extraire les logs d’un niveau spécifique
# Extraire tous les messages de niveau WARNING
Get-Content -Path $logFile | Where-Object { $_ -match '\[WARNING\]' } | ForEach-Object {
Write-Host $_ -ForegroundColor Yellow
}
2.1.3. Générer un rapport à partir des logs
# Compter les occurrences de chaque niveau
$logStats = Get-Content -Path $logFile | ForEach-Object {
if ($_ -match '\[(INFO|WARNING|ERROR)\]') {
$matches[1]
}
} | Group-Object | Select-Object Name, Count
# Afficher les statistiques
$logStats | Format-Table -AutoSize
# Exporter en CSV
$logStats | Export-Csv -Path "C:\Logs\LogStats_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
Sortie :
Name Count ---- ----- INFO 42 WARNING 5 ERROR 2
2.2. Exporter les logs vers Excel
2.2.1. Utiliser ImportExcel (module externe)
# Installer le module (si nécessaire)
Install-Module -Name ImportExcel -Force -Scope CurrentUser
# Importer les logs et exporter vers Excel
$logs = Get-Content -Path $logFile | ForEach-Object {
$parts = $_ -split '\] '
$timestamp = $parts[0].TrimStart('[')
$level = ($parts[1] -split ' ')[0].TrimStart('[')
$message = $parts[2]
[PSCustomObject]@{
Timestamp = $timestamp
Level = $level
Message = $message
}
}
$logs | Export-Excel -Path "C:\Logs\LogReport_$(Get-Date -Format 'yyyyMMdd').xlsx" -WorksheetName "Logs" -AutoSize
Explications :
- ImportExcel : Module pour exporter vers Excel (plus flexible que CSV).
- -AutoSize : Ajuste la largeur des colonnes.
2.2.2. Créer un rapport HTML
# Convertir les logs en HTML
$logs | ConvertTo-Html -Title "Rapport des logs - $(Get-Date -Format 'yyyy-MM-dd')" |
Out-File -FilePath "C:\Logs\LogReport_$(Get-Date -Format 'yyyyMMdd').html"
2.3. Travaux pratiques : Analyser les logs système
Énoncé de l’exercice :
Objectif :
- Lire un fichier de log (C:\Logs\ScriptLog_20251110.log).
- Compter le nombre d’entrées par niveau (INFO, WARNING, ERROR).
- Exporter les résultats :
- En CSV (C:\Logs\LogStats.csv).
- En Excel (C:\Logs\LogReport.xlsx).
- Afficher un résumé dans la console avec des couleurs.
Corrigé :
# Chemin du fichier de log
$logFile = "C:\Logs\ScriptLog_$(Get-Date -Format 'yyyyMMdd').log"
# Vérifier si le fichier existe
if (-not (Test-Path -Path $logFile)) {
Write-Host "Fichier de log introuvable : $logFile" -ForegroundColor Red
exit
}
# Analyser les logs
$logEntries = Get-Content -Path $logFile | ForEach-Object {
if ($_ -match '\[(INFO|WARNING|ERROR)\]') {
$timestamp = ($_ -split '\]')[0].TrimStart('[')
$level = ($_ -split '\]')[1].TrimStart(' [').Split(' ')[0]
$message = ($_ -split '\] ')[1]
[PSCustomObject]@{
Timestamp = $timestamp
Level = $level
Message = $message
}
}
}
# Compter les occurrences par niveau
$logStats = $logEntries | Group-Object -Property Level | Select-Object Name, Count
# Afficher un résumé coloré
$logStats | ForEach-Object {
switch ($_.Name) {
"ERROR" { Write-Host "$($_.Name): $($_.Count)" -ForegroundColor Red }
"WARNING" { Write-Host "$($_.Name): $($_.Count)" -ForegroundColor Yellow }
default { Write-Host "$($_.Name): $($_.Count)" }
}
}
# Exporter en CSV
$logStats | Export-Csv -Path "C:\Logs\LogStats_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
# Exporter en Excel (si le module est installé)
if (Get-Module -ListAvailable -Name ImportExcel) {
Import-Module ImportExcel
$logEntries | Export-Excel -Path "C:\Logs\LogReport_$(Get-Date -Format 'yyyyMMdd').xlsx" -WorksheetName "Logs" -AutoSize
Write-Host "Rapport Excel généré." -ForegroundColor Green
} else {
Write-Host "Module ImportExcel non installé. Utilisez 'Install-Module ImportExcel' pour exporter vers Excel." -ForegroundColor Yellow
}
Explications :
- Regex : Extrait le timestamp, le niveau et le message de chaque ligne.
- Group-Object : Compte les occurrences de chaque niveau.
- Export Excel : Optionnel (nécessite le module ImportExcel).
Les commentaires ne sont pas activés sur ce cours.