# FSLogix VHDX Auto-Resize Script mit Mail-Benachrichtigung # Prüft alle Profile und vergrößert automatisch wenn > 85% voll # # Einrichtung: # 1. Skript anpassen (Pfade, Mail-Einstellungen) # 2. Speichern unter C:\Scripts\FSLogix-AutoResize.ps1 # 3. Log-Ordner anlegen: mkdir C:\Logs # 4. Scheduled Task erstellen (siehe unten) # # Scheduled Task per PowerShell erstellen: # $action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\FSLogix-AutoResize.ps1" # $trigger = New-ScheduledTaskTrigger -Daily -At "06:00" # $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest # Register-ScheduledTask -TaskName "FSLogix AutoResize" -Action $action -Trigger $trigger -Principal $principal #region Konfiguration # ============================================================================ # HIER ANPASSEN # ============================================================================ # Pfad zu den FSLogix Profilen $ProfilePath = "\\fileserver\FSLogix\Profiles" # Ab welchem Füllstand vergrößern (in Prozent) $ThresholdPercent = 85 # Um wie viel GB vergrößern $GrowByGB = 10 # Maximale Größe (Obergrenze) $MaxSizeGB = 100 # Log-Datei $LogFile = "C:\Logs\FSLogix-AutoResize.log" # Mail-Konfiguration $MailSettings = @{ SmtpServer = "mail.example.de" # SMTP-Server Port = 587 # 587 für STARTTLS, 465 für SSL, 25 für unverschlüsselt UseSsl = $true # SSL/TLS verwenden Username = "monitoring@example.de" # SMTP-Benutzername Password = "DEIN-PASSWORT-HIER" # SMTP-Passwort From = "monitoring@example.de" # Absender To = "admin@example.de" # Empfänger (mehrere: "a@x.de","b@x.de") } # ============================================================================ # AB HIER NICHTS MEHR ÄNDERN # ============================================================================ #endregion #region Funktionen function Write-Log { param( [string]$Message, [string]$Level = "INFO" ) # Log-Verzeichnis erstellen falls nicht vorhanden $logDir = Split-Path -Path $LogFile -Parent if (-not (Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir -Force | Out-Null } $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" $logEntry = "[$Level] $timestamp - $Message" # In Datei schreiben $logEntry | Out-File -FilePath $LogFile -Append -Encoding UTF8 # Auch auf Konsole ausgeben switch ($Level) { "ERROR" { Write-Host $logEntry -ForegroundColor Red } "WARNING" { Write-Host $logEntry -ForegroundColor Yellow } "RESIZE" { Write-Host $logEntry -ForegroundColor Green } default { Write-Host $logEntry } } } function Send-AlertMail { param( [string]$Subject, [string]$Body ) try { $securePassword = ConvertTo-SecureString $MailSettings.Password -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential ($MailSettings.Username, $securePassword) $mailParams = @{ SmtpServer = $MailSettings.SmtpServer Port = $MailSettings.Port UseSsl = $MailSettings.UseSsl Credential = $credential From = $MailSettings.From To = $MailSettings.To Subject = $Subject Body = $Body BodyAsHtml = $true Encoding = [System.Text.Encoding]::UTF8 } Send-MailMessage @mailParams Write-Log "Mail erfolgreich gesendet: $Subject" } catch { Write-Log "Mail-Versand fehlgeschlagen: $_" -Level "ERROR" } } function Get-HtmlReport { param( [array]$Warnings, [array]$Resizes, [array]$Errors ) $html = @"
Zusammenfassung: " $summaryParts = @() if ($Resizes.Count -gt 0) { $summaryParts += "✅ $($Resizes.Count) Profile vergrößert" } if ($Warnings.Count -gt 0) { $summaryParts += "⚠️ $($Warnings.Count) Warnungen" } if ($Errors.Count -gt 0) { $summaryParts += "❌ $($Errors.Count) Fehler" } $html += ($summaryParts -join " | ") + "
" # Vergrößerte Profile if ($Resizes.Count -gt 0) { $html += @"| Profil | Alte Größe | Neue Größe | Belegt |
|---|---|---|---|
| $($r.Name) | $($r.OldSize) GB | $($r.NewSize) GB | $($r.UsedPercent)% |
Diese Profile haben die maximale Größe von $MaxSizeGB GB erreicht und können nicht weiter automatisch vergrößert werden.
| Profil | Aktuelle Größe | Belegt |
|---|---|---|
| $($w.Name) | $($w.Size) GB | $($w.UsedPercent)% |
| Profil | Fehlermeldung |
|---|---|
| $($e.Name) | $($e.Error) |