Script zur Speicherplatzüberwachung inkl. E-Mail Benachrichtigung

Um den Speicherplatz zu überwahcen, kann folgendes Script genutzt werden:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 #Aktivieren von Starttls für Office 365

$thresholdPercentage = 4  # Schwellenwert in Prozent

$drives = Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3"
$hostname = $env:COMPUTERNAME  # Hostname des Systems

$drivesExceeded = @()
$allExceededDrives = @()

$logFilePath = "C:\Services\Scripts\warnung.csv"

function Save-EmailContentToFile {
    param (
        [string]$filePath,
        [string]$content
    )
    try {
        Set-Content -Path $filePath -Value $content
        Write-Host "E-Mail-Inhalt erfolgreich in die Datei gespeichert."
    } catch {
        Write-Host "Fehler beim Speichern des E-Mail-Inhalts in die Datei: $_"
    }
}

foreach ($drive in $drives) {
    $driveLetter = $drive.DeviceID

    try {
        $totalSpaceGB = [math]::Round($drive.Size / 1GB, 2)
        $freeSpaceGB = [math]::Round($drive.FreeSpace / 1GB, 2)
        $thresholdGB = [math]::Round($totalSpaceGB * ($thresholdPercentage / 100), 2)
        $freeSpacePercentage = [math]::Round(($freeSpaceGB / $totalSpaceGB) * 100, 2)

        if ($freeSpaceGB -le $thresholdGB) {
            $driveInfo = "Laufwerk $driveLetter Freier Speicherplatz betraegt nur noch $freeSpaceGB GB ($freeSpacePercentage % frei)."
            $drivesExceeded += $driveInfo

            Add-Content -Path $logFilePath -Value "$([DateTime]::Now) - Warnung: E-Mail wurde für Laufwerk $driveLetter gesendet. Freier Speicherplatz beträgt nur noch $freeSpaceGB GB ($freeSpacePercentage % frei) ."
        } else {
            Write-Host "Der freie Speicherplatz auf Laufwerk $driveLetter beträgt noch ausreichend ($freeSpaceGB GB)."
        }
    } catch {
        $errorMsg = "Fehler bei der Überprüfung von Laufwerk $driveLetter : $_"
        Write-Host $errorMsg
        $drivesExceeded += $errorMsg
    }
}

if ($drivesExceeded.Count -gt 0) {

#Variablen für Send-MailMessage

$smtpServer = "smtp.office365.com"
$smtpPort = 587
$smtpUsername = "Systembenachrichtigung@sadsda.de"   #Muss je nach kunde abgeändert werden
$smtpPassword = "sadsadsad"  #Muss je nach kunde abgeändert werden
$toEmail = "support@asdsdsadasd.de" #Empfänger
$subject = "Warnung: Geringer Speicherplatz auf Laufwerken - Host: $hostname"   #Betreff
$mailBody = "Folgende Laufwerke haben den Schwellenwert fuer geringen Speicherplatz ueberschritten:`r`n$($drivesExceeded -join "`r`n")" #E-Mail Inhalt, kann nach belieben angepasst werden

#Send-MailMessage Befehl, zum versenden der Mail
Send-MailMessage -From $smtpUsername -to $toEmail -Subject $subject -Body $mailBody -SmtpServer $smtpServer -Port $smtpPort -UseSsl -Credential (New-Object System.Management.Automation.PSCredential $smtpUsername, (ConvertTo-SecureString $smtpPassword -AsPlainText -Force))

    try {
        #C:\Services\Scripts\EmailBenachrichtigung.ps1 #Ursprünglich für den Lob, aktuell irrelevant
        Write-Host "E-Mail wurde erfolgreich gesendet."
    } catch {
        Write-Host "Fehler beim Senden der E-Mail: $_"
        Add-Content -Path $logFilePath -Value "$([DateTime]::Now) - Fehler beim Senden der E-Mail: $_"
    }
}

WiKi.Premium-Lizenz.com
Logo
Jetzt registrieren