slogan3

Automatiseer Windows Server monitoring en rapportage met PowerShell

description

Met deze prompt kun je een op maat gemaakt PowerShell-script krijgen dat je helpt om je Windows Server effectief te monitoren en automatisch rapportages te genereren. Dit verbetert je serverbeheer door proactief inzicht te geven in prestaties en problemen, waardoor downtime en incidenten worden verminderd. Het is beter dan handmatige methoden omdat het tijd bespaart en consistentie waarborgt.

prompt

Help me een PowerShell-script te maken om mijn Windows Server continue te monitoren en periodieke rapportages te genereren. Server versie: <voer de Windows Server versie in die je gebruikt> Te monitoren componenten: <beschrijf welke servercomponenten of services je wilt monitoren, bijvoorbeeld CPU-gebruik, schijfruimte, netwerkverkeer> Rappo ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld PowerShell-script dat je kunt gebruiken om je Windows Server 2016 continu te monitoren en dagelijks rapportages te genereren over CPU-gebruik en schijfruimte. Het script bevat ook waarschuwingen bij het overschrijden van drempels en kan gemakkelijk worden uitgebreid. **Stap 1: Het script** ```powershell # Monitoring Script voor Windows Server 2016 # Dit script controleert CPU-gebruik en schijfruimte, en genereert een rapport met waarschuwingen. # Configuratie $rapportPad = "C:\Rapporten" # Map voor rapporten $rapportNaam = "Rapport_" + (Get-Date -Format "yyyyMMdd") + ".txt" $cpuDrempel = 80 $schijfDrempel = 10 # percentage vrij # Zorg dat de rapportmap bestaat if (!(Test-Path $rapportPad)) { New-Item -ItemType Directory -Path $rapportPad | Out-Null } # Start rapport $rapport = @() $rapport += "Monitoring Rapport - " + (Get-Date) - 00:00 $rapport += "--------------------------------------------------" $rapport += "" # CPU-gebruik # Opmerking: Voor CPU gebruik op Windows Server 2016 kan PerformanceCounter worden gebruikt # of 'Get-Counter' commando try { $cpuGebruik = (Get-Counter '\Processor(_Total)\% Processor Time').CounterSamples.CookedValue $cpuGebruik = [math]::Round($cpuGebruik, 2) $rapport += "CPU-gebruik: $cpuGebruik %" if ($cpuGebruik -gt $cpuDrempel) { $rapport += "WAARSCHUWING: CPU-gebruik boven drempel van $cpuDrempel%!" } } catch { $rapport += "Fout bij het ophalen van CPU-gebruik." } # Schijfruimte # Loop door alle stations $schijven = Get-PSDrive -PSProvider FileSystem foreach ($schijf in $schijven) { $freePercent = ($schijf.Free / $schijf.Used + $schijf.Free) * 100 # Alternatief: gebruik WMI voor preciezere gegevens $wmi = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='$($schijf.Name):'" if ($wmi) { $freePercent = [math]::Round(($wmi.FreeSpace / $wmi.Size) * 100, 2) $gebruikPercent = 100 - $freePercent $rapport += "Stationsletter: $($schijf.Name):" $rapport += " Vrije ruimte: $freePercent %" $rapport += " Gebruikte ruimte: $gebruikPercent %" if ($freePercent -lt $schijfDrempel) { $rapport += " WAARSCHUWING: Schijfruimte onder drempel van $schijfDrempel%!" } $rapport += "" } } # Rapport opslaan $rapportBestand = Join-Path $rapportPad $rapportNaam $rapport | Out-File -FilePath $rapportBestand -Encoding UTF8 # Optioneel: e-mail versturen bij waarschuwingen # (Hier kun je je SMTP-instellingen toevoegen) Write-Output "Rapport gegenereerd: $rapportBestand" ``` **Stap 2: Automatisering** Gebruik Taakplanner om dit script dagelijks uit te voeren: 1. Open Taakplanner (`taskschd.msc`) 2. Maak een nieuwe taak 3. Kies voor een dagelijkse planning 4. Voeg een actie toe: voer `powershell.exe` uit met argumenten zoals: ```powershell -ExecutionPolicy Bypass -File "C:\PadNaarScript\monitoring.ps1" ``` **Uitbreidingsmogelijkheden:** - Toevoegen van meer componenten zoals geheugen- of netwerkgebruik. - E-mail notificaties bij waarschuwingen via `Send-MailMessage`. - Logboek bijhouden van prestaties over tijd. - Grafieken genereren met bijvoorbeeld Excel of grafieken in PowerShell. **Belangrijk:** - Pas de paden en drempels aan naar jouw situatie. - Test het script handmatig voordat je automatische taken instelt. Ik hoop dat dit je een goede start geeft voor continue monitoring en rapportage!
provider: deepseek
model: deepseek-chat
Hier is een uitgebreid PowerShell monitoring script voor Windows Server 2016 met duidelijke uitleg: ```powershell # Server Monitoring Script voor Windows Server 2016 # Monitor CPU-gebruik en schijfruimte met dagelijkse rapportage # Configuratie parameters - eenvoudig aanpasbaar $Config = @{ CPUDrempel = 80 # Waarschuwing bij CPU-gebruik > 80% SchijfDrempel = 10 # Waarschuwing bij schijfruimte < 10% LogPad = "C:\Monitoring\Logs\" RapportPad = "C:\Monitoring\Rapporten\" ServerNaam = $env:COMPUTERNAME } # Functie om mappen aan te maken indien niet bestaand function Initializeer-Mappen { param($Config) if (!(Test-Path $Config.LogPad)) { New-Item -ItemType Directory -Path $Config.LogPad -Force } if (!(Test-Path $Config.RapportPad)) { New-Item -ItemType Directory -Path $Config.RapportPad -Force } } # Functie om CPU-gebruik te monitoren function Monitor-CPU { param($Drempel) try { $CPUUsage = (Get-Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue | Measure-Object -Average).Average $CPUStatus = if ($CPUUsage -gt $Drempel) { "WAARSCHUWING" } else { "NORMAAL" } return @{ Usage = [math]::Round($CPUUsage, 2) Status = $CPUStatus Drempel = $Drempel } } catch { return @{ Usage = "N/A" Status = "FOUT" Drempel = $Drempel Fout = $_.Exception.Message } } } # Functie om schijfruimte te monitoren function Monitor-Schijfruimte { param($Drempel) try { $Schijven = Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" | Select-Object DeviceID, @{Name="VrijeRuimteGB"; Expression={[math]::Round($_.FreeSpace/1GB, 2)}}, @{Name="TotaleRuimteGB"; Expression={[math]::Round($_.Size/1GB, 2)}}, @{Name="PercentageVrij"; Expression={[math]::Round(($_.FreeSpace/$_.Size)*100, 2)}} $Resultaten = @() foreach ($Schijf in $Schijven) { $Status = if ($Schijf.PercentageVrij -lt $Drempel) { "WAARSCHUWING" } else { "NORMAAL" } $Resultaten += @{ Station = $Schijf.DeviceID VrijeRuimteGB = $Schijf.VrijeRuimteGB TotaleRuimteGB = $Schijf.TotaleRuimteGB PercentageVrij = $Schijf.PercentageVrij Status = $Status Drempel = $Drempel } } return $Resultaten } catch { return @{ Station = "N/A" Status = "FOUT" Fout = $_.Exception.Message } } } # Functie om rapport te genereren function Genereer-Rapport { param($Config, $CPUData, $SchijfData) $RapportBestand = "$($Config.RapportPad)ServerRapport_$(Get-Date -Format 'yyyyMMdd_HHmmss').html" $Tijdstip = Get-Date -Format "dd-MM-yyyy HH:mm:ss" # HTML rapport opbouw $HTMLRapport = @" <!DOCTYPE html> <html> <head> <title>Server Monitoring Rapport - $($Config.ServerNaam)</title> <style> body { font-family: Arial, sans-serif; margin: 20px; } .header { background-color: #f0f0f0; padding: 10px; border-radius: 5px; } .waarschuwing { background-color: #ffcccc; padding: 10px; margin: 5px 0; border-left: 5px solid red; } .normaal { background-color: #ccffcc; padding: 10px; margin: 5px 0; border-left: 5px solid green; } .fout { background-color: #ffffcc; padding: 10px; margin: 5px 0; border-left: 5px solid orange; } table { width: 100%; border-collapse: collapse; margin: 10px 0; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } </style> </head> <body> <div class="header"> <h1>Server Monitoring Rapport</h1> <p><strong>Server:</strong> $($Config.ServerNaam)</p> <p><strong>Datum/Tijd:</strong> $Tijdstip</p> </div> <h2>CPU Monitoring</h2> <div class="$($CPUData.Status.ToLower())"> <p><strong>Gebruik:</strong> $($CPUData.Usage)%</p> <p><strong>Status:</strong> $($CPUData.Status)</p> <p><strong>Drempel:</strong> $($CPUData.Drempel)%</p> "@ if ($CPUData.Fout) { $HTMLRapport += "<p><strong>Fout:</strong> $($CPUData.Fout)</p>" } $HTMLRapport += @" </div> <h2>Schijfruimte Monitoring</h2> <table> <tr> <th>Station</th> <th>Vrije Ruimte (GB)</th> <th>Totale Ruimte (GB)</th> <th>Percentage Vrij</th> <th>Status</th> </tr> "@ foreach ($Schijf in $SchijfData) { $HTMLRapport += @" <tr> <td>$($Schijf.Station)</td> <td>$($Schijf.VrijeRuimteGB)</td> <td>$($Schijf.TotaleRuimteGB)</td> <td>$($Schijf.PercentageVrij)%</td> <td>$($Schijf.Status)</td> </tr> "@ } $HTMLRapport += @" </table> </body> </html> "@ $HTMLRapport | Out-File -FilePath $RapportBestand -Encoding UTF8 return $RapportBestand } # Functie om logboek bij te houden function Schrijf-Log { param($Bericht, $Config) $LogBestand = "$($Config.LogPad)MonitoringLog_$(Get-Date -Format 'yyyyMMdd').txt" $LogEntry = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - $Bericht" Add-Content -Path $LogBestand -Value $LogEntry } # Hoofd monitoring functie function Start-Monitoring { param($Config) # Initialiseer mappen Initializeer-Mappen -Config $Config # Verzamel monitoring data Schrijf-Log -Bericht "Monitoring gestart" -Config $Config $CPUData = Monitor-CPU -Drempel $Config.CPUDrempel $SchijfData = Monitor-Schijfruimte -Drempel $Config.SchijfDrempel # Genereer rapport $RapportPad = Genereer-Rapport -Config $Config -CPUData $CPUData -SchijfData $SchijfData # Log resultaten Schrijf-Log -Bericht "CPU: $($CPUData.Usage)% - Status: $($CPUData.Status)" -Config $Config foreach ($Schijf in $SchijfData) { Schrijf-Log -Bericht "Schijf $($Schijf.Station): $($Schijf.PercentageVrij)% vrij - Status: $($Schijf.Status)" -Config $Config } Schrijf-Log -Bericht "Rapport gegenereerd: $RapportPad" -Config $Config return @{ CPU = $CPUData Schijven = $SchijfData RapportPad = $RapportPad } } # UITVOERING - Verwijder commentaar om direct uit te voeren # $Resultaat = Start-Monitoring -Config $Config # Write-Host "Monitoring voltooid. Rapport: $($Resultaat.RapportPad)" ``` ## Automatisering met Taakplanner: Maak een scheduled task aan met dit PowerShell commando: ```powershell # Script opslaan als C:\Monitoring\ServerMonitor.ps1 # Taakplanner commando (uitvoeren als Administrator): $Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File `"C:\Monitoring\ServerMonitor.ps1`"" $Trigger = New-ScheduledTaskTrigger -Daily -At "08:00" Register-ScheduledTask -TaskName "ServerDailyMonitoring" -Action $Action -Trigger $Trigger -Description "Dagelijkse server monitoring en rapportage" ``` ## Uitbreidingsmogelijkheden: 1. **E-mail notificaties** toevoegen: ```powershell function Verstuur-EmailWaarschuwing { param($Config, $CPUData, $SchijfData) # Gebruik Send-MailMessage of SMTP client } ``` 2. **Extra monitoring parameters**: ```powershell # Geheugen gebruik Get-Counter "\Memory\Available MBytes" # Netwerk statistieken Get-NetAdapterStatistics ``` 3. **Database logging** toevoegen voor historische data 4. **Real-time monitoring** met While-loop en Start-Sleep Het script is modulair opgebouwd voor eenvoudig onderhoud en uitbreidingen. Elke functie heeft een specifieke taak en de configuratie is centraal beheerd.
error: Generation failed [deepseek] prompt_id=4852 locale=pt err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=4852 locale=es err=DeepSeek connection/timeout