DEV Community

divin komotir
divin komotir

Posted on

Monitoring Windows en 10 minutes avec un script PowerShell simple

Vous avez besoin d’un moyen rapide pour surveiller les performances de votre machine Windows ? Plutôt que d’installer des outils complexes, voici un script PowerShell léger et efficace que vous pouvez écrire et exécuter en 10 minutes max !

Pourquoi ce script ?

Parfois, on a juste besoin de vérifier rapidement :

  • Si le CPU est surchargé
  • Combien il reste de mémoire disponible
  • L’espace disque libre sur C:
  • Quels sont les processus les plus gourmands

Ce script répond à ces besoins sans installation, en utilisant uniquement PowerShell.

C'est parti !

Pour commencer, on va écrire notre script dans un éditeur de texte.

# monitoring_simple.ps1
$logFile = "C:\monitoring\log_system_$(Get-Date -Format 'yyyyMMdd').log"
$monitoringDuration = 600 # 10 minutes
$interval = 5 # Toutes les 5 secondes

if (-not (Test-Path -Path (Split-Path $logFile -Parent))) {
    New-Item -ItemType Directory -Path (Split-Path $logFile -Parent) | Out-Null
}

Add-Content -Path $logFile -Value "=== Début du monitoring $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') ==="
Add-Content -Path $logFile -Value "Timestamp,CPU(%),Mémoire Libre(Mo),Disque Libre(Go),Processus"

function Get-CPUUsage { (Get-Counter '\Processor(_Total)\% Processor Time').CounterSamples.CookedValue | Round 2 }
function Get-FreeMemory { (Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory / 1MB | Round 2 }
function Get-FreeDiskSpace { (Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'").FreeSpace / 1GB | Round 2 }
function Get-TopProcesses { (Get-Process | Sort-Object CPU -Descending | Select-Object -First 3 | ForEach-Object { "$($_.Name)($($_.CPU.ToString('N1'))%)" }) -join ", " }

$endTime = (Get-Date).AddSeconds($monitoringDuration)
while ((Get-Date) -lt $endTime) {
    $logEntry = "$(Get-Date -Format 'HH:mm:ss'),$(Get-CPUUsage),$(Get-FreeMemory),$(Get-FreeDiskSpace),$(Get-TopProcesses)"
    Add-Content -Path $logFile -Value $logEntry
    Write-Host "[$(Get-Date -Format 'HH:mm:ss')] CPU: $(Get-CPUUsage)%, Mémoire libre: $(Get-FreeMemory) Mo"
    Start-Sleep -Seconds $interval
}

Add-Content -Path $logFile -Value "=== Fin du monitoring $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') ==="
Write-Host "✅ Monitoring terminé. Logs dans $logFile"
Enter fullscreen mode Exit fullscreen mode

Ensuite, il faudra enregistrer le code dans un fichier avec l'extension .ps1 .

Comment l’utiliser ?

  • Ouvrez PowerShell en admin (Win + X → Terminal Admin).
  • Exécutez le fichier (par exemple avec .\monitoring_simple.ps1).
  • Consultez les logs dans C:\monitoring\log_system_*.log

Vous aurez un exemple de sortie comme suit :

=== Début du monitoring 2024-05-18 14:30:00 ===
Timestamp,CPU(%),Mémoire Libre(Mo),Disque Libre(Go),Processus
14:30:05,12.5,4237.21,125.8,chrome(7.5%),Teams(3.1%),explorer(1.2%)
14:30:10,8.2,4210.54,125.8,chrome(5.1%),vscode(2.3%),svchost(0.8%)
=== Fin du monitoring 2024-05-18 14:40:00 ===
Enter fullscreen mode Exit fullscreen mode

Quoi d'autre ?

Vous pouvez personnaliser ce script avec :

  • Changer la durée : Modifiez $monitoringDuration.
  • Surveiller un autre disque : Remplacez DeviceID='C:' par 'D:'.
  • Ajouter d’autres métriques : Utilisez Get-Counter pour surveiller le réseau, les disques, etc.

Et vous ? Vous utilisez quoi pour du monitoring simple sur Windows ? Dites-le en commentaires ! 👇

PowerShell #Windows #DevOps #Monitoring #Scripting

Top comments (0)