# ClamAV-FullScan.ps1
# PowerShell-Skript für ClamAV unter Windows
# === Einstellungen =============================
# Pfad zur ClamAV-Installation
$clamAvPath = "C:\Program Files\ClamAV"
# Welche Laufwerke/Ordner sollen gescannt werden?
$scanPaths = @("C:\")
# Wohin sollen die Logs?
$logRoot = "$env:ProgramData\ClamAV\logs"
# ==============================================
# Sicherstellen, dass das Log-Verzeichnis existiert
if (-not (Test-Path -Path $logRoot)) {
New-Item -ItemType Directory -Path $logRoot -Force | Out-Null
}
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$logFile = Join-Path $logRoot "clamscan_$timestamp.log"
Write-Host "ClamAV-Skript gestartet..."
Write-Host "Logfile: $logFile"
Write-Host ""
# Pfade zu den EXE-Dateien
$freshclamExe = Join-Path $clamAvPath "freshclam.exe"
$clamscanExe = Join-Path $clamAvPath "clamscan.exe"
if (-not (Test-Path $freshclamExe)) {
Write-Host "Fehler: freshclam.exe wurde nicht gefunden unter: $freshclamExe"
exit 2
}
if (-not (Test-Path $clamscanExe)) {
Write-Host "Fehler: clamscan.exe wurde nicht gefunden unter: $clamscanExe"
exit 2
}
# === 1) Signaturen aktualisieren =========================
Write-Host "Aktualisiere Virendefinitionen (freshclam)..."
# freshclam ausführen und Ausgabe ins Log schreiben
& $freshclamExe 2>&1 | Tee-Object -FilePath $logFile -Append
$freshclamExit = $LASTEXITCODE
if ($freshclamExit -ne 0) {
Write-Host "WARNUNG: freshclam konnte die Signaturen nicht aktualisieren (ExitCode $freshclamExit)."
Write-Host "Es wird trotzdem mit den vorhandenen Signaturen gescannt."
Add-Content -Path $logFile -Value "WARNUNG: freshclam-Update fehlgeschlagen (ExitCode $freshclamExit). Scan läuft mit vorhandenen Signaturen.`r`n"
}
# === 2) Scan vorbereiten =================================
Write-Host "Starte ClamAV-Scan..."
$scanArgs = @(
"-r" # rekursiv
"-i" # nur infizierte Dateien melden
)
# Scan-Pfade anhängen
$scanArgs += $scanPaths
# === 3) Scan ausführen ===================================
# WICHTIG: clamscan schreibt NICHT selbst ins Log, nur Tee-Object!
& $clamscanExe $scanArgs 2>&1 | Tee-Object -FilePath $logFile -Append
$exitCode = $LASTEXITCODE
# === 4) Ergebnis auswerten ===============================
$statusText = ""
switch ($exitCode) {
0 { $statusText = "Keine infizierten Dateien gefunden."; break }
1 { $statusText = "Infizierte Dateien gefunden! Bitte Log prüfen."; break }
2 { $statusText = "Scanfehler aufgetreten. Details im Logfile."; break }
default { $statusText = "Unbekannter ExitCode: $exitCode. Logfile prüfen."; break }
}
Write-Host ""
Write-Host "=== ClamAV Scan beendet ==="
Write-Host "Status: $statusText"
Write-Host "Logfile: $logFile"
# === 5) Popup-Benachrichtigung anzeigen ==================
try {
Add-Type -AssemblyName System.Windows.Forms | Out-Null
[System.Windows.Forms.MessageBox]::Show(
"Status: $statusText`nLog: $logFile",
"ClamAV-Scan beendet",
[System.Windows.Forms.MessageBoxButtons]::OK,
[System.Windows.Forms.MessageBoxIcon]::Information
) | Out-Null
} catch {
# Falls keine GUI verfügbar ist, einfach ignorieren
}
exit $exitCode