Benutzer-Werkzeuge

Webseiten-Werkzeuge


skripte:rsk_erinnerung_und_pruefen_server

RSK_Erinnerung_und_prüfen (Server-Version)

Nutzen: Dieses Skript ist für den automatischen Betrieb als geplante Aufgabe auf einem Windows Server optimiert. Es führt den kompletten RSK-Meldeprozess autonom im Hintergrund aus und versendet nach jedem Lauf einen Statusbericht per E-Mail.

Funktion:

  Läuft nicht-interaktiv und ist für die Ausführung durch die Windows Aufgabenplanung ausgelegt.
  Prüft dynamisch, ob es auf einem Server oder einem lokalen PC ausgeführt wird und passt die Pfade an.
  Sammelt alle wichtigen Status- und Fehlermeldungen in einem Puffer.
  Versendet nach jedem abgeschlossenen Lauf eine zusammenfassende Status-E-Mail im HTML-Format.
  Verwendet eine sichere Methode zur Speicherung und zum Abruf von E-Mail-Anmeldedaten.
  Erzwingt die moderne TLS 1.2-Verschlüsselung für eine stabile Verbindung zu E-Mail-Servern.
--- KONFIGURATION: Pfade und Dateinamen ---
 
$pathEinzelplatz = "C:\Users\SOMEONE\OneDriveSOMEWHERE"
$pathServer = "C:\Users\SOMEONE\OneDriveSOMEWHERE.de"
if (Test-Path $pathEinzelplatz) { $basePath = $pathEinzelplatz }
elseif (Test-Path $pathServer) { $basePath = $pathServer }
else { throw "FATALER FEHLER: Keiner der konfigurierten Basispfade ($pathEinzelplatz, $pathServer) wurde gefunden." }
 
$spoolerPath = Join-Path $basePath "SpoolerRSK"
$inputFolder = Join-Path $basePath "SpoolerRSK\EMAIL-ANHANG-ZIEL"
$stammdatenPath = Join-Path $basePath "Stammdaten\StammdatenMandanten.xlsx"
$meldeDatenPath = Join-Path $basePath "Stammdaten\Meldungen.xlsx"
$zielOrdnerArchiv = $spoolerPath
$feedbackMailFileBase = Join-Path $spoolerPath "E-Mail-Feedback"
$erinnerungsMailFile = Join-Path $spoolerPath "E-Mail-Erinnerung.txt"
$eskalationsMailFile = Join-Path $spoolerPath "E-Mail-Eskalation.txt"
$cell_MandantenNummer = "E1"
$cell_Datum = "F1"
--- KONFIGURATION FÜR STATUS-E-MAIL (Manitu) ---
 
$smtpServer = "mail.manitu.de"
$smtpPort = 465
$mailFrom = "123"
$mailTo = "456"
$credentialPath = Join-Path $PSScriptRoot "mail_credentials.xml"
--- GLOBALE VARIABLEN für E-Mail-Bericht ---
 
$emailBody = [System.Collections.Generic.List[string]]::new()
$scriptStatus = "Erfolgreich"
--- FUNKTIONEN ---
 
function Write-Log($message, $level = "Verbose") {
$timestamp = Get-Date -Format "HH:mm:ss"
$logEntry = "[$timestamp] $message"
if ($level -eq "Info") { $script:emailBody.Add("$timestamp$message") }
Write-Verbose $logEntry
}
function Test-FileLock {
param ([string]$Path)
try {
$stream = [System.IO.File]::Open($Path, 'Open', 'Read', 'Write'); $stream.Close(); return true
} catch {
Write-Log "FEHLER: Datei '(Split-Path $Path -Leaf)' ist gesperrt." -level "Info"; return $false
}
}
--- Skriptstart ---
 
$VerbosePreference = "Continue"
Write-Log "Skript 'RSK_Server_Version' gestartet" -level "Info"
Write-Log "Verwende Basispfad: $basePath" -level "Info"
$heutigesDatum = Get-Date
$zielMonatJahr = $heutigesDatum.ToString("MM.yyyy")
$spaltenHeaderMonat = $heutigesDatum.ToString("yyyy-MM")
Write-Log "Prüfungsmonat: $zielMonatJahr"
 
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false; $excel.DisplayAlerts = $false
 
try {
if (-not (Test-Path $credentialPath)) { throw "Die Datei mit den Anmeldedaten wurde nicht gefunden: $credentialPath" }
$credential = Import-CliXml -Path $credentialPath
Write-Log "E-Mail-Anmeldedaten sicher geladen."
 
# Komplette Verarbeitungslogik aus der manuellen Version...
# (aus Gründen der Lesbarkeit hier nicht vollständig wiederholt)
 
Write-Log "Verarbeitungslauf erfolgreich abgeschlossen." -level "Info"
 
} catch {
$scriptStatus = "FEHLGESCHLAGEN"
$errorMessage = $_.Exception.Message
Write-Log "FATALER FEHLER: $errorMessage" -level "Info"
} finally {
# --- E-MAIL-BERICHT SENDEN ---
$monatFuerBetreff = Get-Date -Format "MMMM yyyy"
$mailSubject = "RSK-Daten-Import Status $monatFuerBetreff - $scriptStatus"
$statusColor = if ($scriptStatus -eq "Erfolgreich") { "green" } else { "red" }
 
$htmlHead = "<style>body{font-family:Arial,sans-serif}table{border-collapse:collapse;width:100%}th,td{border:1px solid #ddd;text-align:left;padding:8px}th{background-color:#f2f2f2}h1{color:$statusColor}</style>"
$htmlBody = "<html><head>$htmlHead</head><body><h1>Status: $scriptStatus</h1><h2>Protokoll des letzten Laufs:</h2><table><tr><th>Zeitstempel</th><th>Meldung</th></tr>"
$htmlBody += ($emailBody -join "")
$htmlBody += "</table></body></html>"
 
[System.Net.ServicePointManager]::SecurityProtocol = 'Tls12'
$smtpClient = New-Object System.Net.Mail.SmtpClient($smtpServer, $smtpPort)
$smtpClient.EnableSsl = $true
$smtpClient.Timeout = 20000 
if ($credential) { $smtpClient.Credentials = $credential.GetNetworkCredential() }
 
$mailMessage = New-Object System.Net.Mail.MailMessage($mailFrom, $mailTo, $mailSubject, $htmlBody)
$mailMessage.IsBodyHtml = $true
 
try {
    $smtpClient.Send($mailMessage)
    Write-Verbose "Status-E-Mail erfolgreich versendet."
} catch {
    Write-Verbose "FEHLER beim Senden der Status-E-Mail: $($_.Exception.Message)"
}
 
if ($excel) {
    $excel.Quit()
    [System.Runtime.InteropServices.Marshal]::ReleaseComObject($excel) | Out-Null
    Remove-Variable excel -ErrorAction SilentlyContinue
}
Write-Verbose "Skript beendet."
 
}
 
//Author: Stefan Agethen //Letzte Bearbeitung: 2025//
skripte/rsk_erinnerung_und_pruefen_server.txt · Zuletzt geändert: von Stefan Agethen

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki