Einblicke in (Security)-Themen ausm tiefen Wald

Monat: April 2025

CPU Auslastung prüfen und alarmieren

Mittels PowerShell kann man automatisiert die CPU überwachen und sich dazu alarmieren lassen, wie folgt:


# Überwachen der CPU-Auslastung und Benachrichtigung senden
$cpuThreshold = 80
while ($true) {
    $cpuLoad = Get-WmiObject win32_processor | Measure-Object -property LoadPercentage -Average | Select -ExpandProperty Average
    if ($cpuLoad -gt $cpuThreshold) {
        [System.Windows.Forms.MessageBox]::Show("CPU-Auslastung ist über $cpuThreshold%: $cpuLoad%")
    }
    Start-Sleep -Seconds 60
}

Der Parameter „cpuThreshold“ gibt das Limit für die CPU an, ab der alarmiert werden soll.

Der Parameter „Start-Sleep“ ermöglicht die Festlegung des Prüfintervalls (60 Sekunden „schlafenlegen“ hier).

Die Alarmierung erfolgt mittels Popup auf dem jeweiligen System.

Automatisch Screenshots machen (alle 60 Sekunden)

Wenn man einen Screenshot machen will von seinem Bildschirm, so ist das mittels PowerShell komfortabel möglich, wie folgt:


Add-Type -AssemblyName System.Drawing

function Take-Screenshot {
    $screenWidth = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Width
    $screenHeight = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Height
    $bitmap = New-Object System.Drawing.Bitmap $screenWidth, $screenHeight
    $graphics = [System.Drawing.Graphics]::FromImage($bitmap)
    $graphics.CopyFromScreen(0, 0, 0, 0, $bitmap.Size)
    $timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
    $filePath = "C:\Screenshots\Screenshot_$timestamp.png"
    $bitmap.Save($filePath, [System.Drawing.Imaging.ImageFormat]::Png)
    $graphics.Dispose()
    $bitmap.Dispose()
    return $filePath
}

# Erstellen des Screenshots-Ordners, falls nicht vorhanden
if (-not (Test-Path "C:\Screenshots")) {
    New-Item -ItemType Directory -Path "C:\Screenshots"
}

# Screenshots in regelmäßigen Abständen machen
while ($true) {
    Take-Screenshot
    Start-Sleep -Seconds 60
}

Wenn man einen festen Ordner eintragen will, so kann man sich die Funktion zur Prüfung auf den Ordner sparen.

Mittels „Start-Sleep“ und dem Parameter „Seconds“ lässt sich das Intervall festlegen. Wenn es nur einmalig passieren soll, so würde folgender Code reichen:

Add-Type -AssemblyName System.Drawing

$screenWidth = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Width
    $screenHeight = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Height
    $bitmap = New-Object System.Drawing.Bitmap $screenWidth, $screenHeight
    $graphics = [System.Drawing.Graphics]::FromImage($bitmap)
    $graphics.CopyFromScreen(0, 0, 0, 0, $bitmap.Size)
    $timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
    $filePath = "C:\Screenshots\Screenshot_$timestamp.png"
    $bitmap.Save($filePath, [System.Drawing.Imaging.ImageFormat]::Png)
    $graphics.Dispose()
    $bitmap.Dispose()
    return $filePath

Präsentiert von WordPress & Theme erstellt von Anders Norén