skripte:rsk_pruefen_vor_spooler
RSK_prüfen_vor_Spooler
Nutzen: Dieses Skript dient als vorgeschaltete Qualitätskontrolle für Excel-Dateien, bevor sie in einen automatisierten Prozess (Spooler) importiert werden. Es stellt sicher, dass nur valide Dateien verarbeitet werden.
Funktion:
Prüft alle Excel-Dateien in einem definierten Ordner.
Kontrolliert das Datum in Zelle F1 gegen den aktuellen Monat und das aktuelle Jahr.
Prüft die Mandantennummer in Zelle E1 gegen eine Liste ungültiger Nummern.
Erkennt und überspringt Dateien, die bereits durch einen anderen Prozess geöffnet (gesperrt) sind.
Erstellt am Ende eine zusammenfassende CSV-Datei mit den Prüfergebnissen.
--- ANPASSENDE VARIABLEN --- $folderPath = "DEINPATH" $cell_MandantenNummer = "E1" $cell_Datum = "F1" $ungueltigeNummern = @("10001", "12345") $outputFile = Join-Path $folderPath "Vor-Spooler-Pruefungs-Ergebnis.csv" --- ENDE DER ANPASSUNGEN --- --- VORBEREITUNG --- $heutigesDatum = Get-Date $zielMonatJahr = $heutigesDatum.ToString("MM.yyyy") Write-Host "Prüfung für Monat/Jahr: $zielMonatJahr" -ForegroundColor Magenta if (-not (Test-Path $folderPath)) { Write-Host "FEHLER: Der angegebene Ordner '$folderPath' wurde nicht gefunden." -ForegroundColor Red exit } $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $results = @() $excelFiles = Get-ChildItem -Path $folderPath -Filter "*.xlsx" --- HAUPTVERARBEITUNG --- foreach ($file in $excelFiles) { Write-Host "`n--- Prüfe Datei: $($file.Name) ---" -ForegroundColor Yellow try { $stream = [System.IO.File]::Open($file.FullName, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::None) if ($stream) { $stream.Close() } } catch { $status = "FEHLER"; $fehlerGrund = "Datei ist bereits geöffnet oder gesperrt." Write-Host " -> FINALER STATUS:" -NoNewline; Write-Host " $status" -ForegroundColor Red Write-Host " > Grund: $fehlerGrund" -ForegroundColor Red $results += [PSCustomObject]@{ "Dateiname" = $file.Name; "Status" = $status; "Grund_bei_Fehler" = $fehlerGrund "Gelesene_Mandantennr" = "N/A"; "Gelesenes_Datum" = "N/A" } continue } $status = "OK"; $fehlerGrund = "" try { $workbook = $excel.Workbooks.Open($file.FullName, $true) $worksheet = $workbook.Worksheets.Item(1) $mandantenNummerAusZelle = $worksheet.Range($cell_MandantenNummer).Text $datumAusZelle = $worksheet.Range($cell_Datum).Text $workbook.Close($false) } catch { $status = "FEHLER"; $fehlerGrund = "Datei konnte nicht gelesen werden: $($_.Exception.Message)" $mandantenNummerAusZelle = "N/A"; $datumAusZelle = "N/A" } if ($status -eq "OK") { Write-Host " -> Prüfe Mandantennummer '$mandantenNummerAusZelle'..." if ($ungueltigeNummern -contains $mandantenNummerAusZelle) { $status = "FEHLER"; $fehlerGrund = "Ungültige Mandantennummer gefunden." } else { Write-Host " > Nummer ist gültig." } if ($status -eq "OK") { Write-Host " -> Prüfe Datum '$datumAusZelle' gegen '$zielMonatJahr'..." if ($datumAusZelle -notlike "*$zielMonatJahr*") { $status = "FEHLER"; $fehlerGrund = "Datum stimmt nicht mit aktuellem Monat/Jahr überein." } else { Write-Host " > Datum ist korrekt." } } } if ($status -eq "OK") { Write-Host " -> FINALER STATUS:" -NoNewline; Write-Host " $status" -ForegroundColor Green } else { Write-Host " -> FINALER STATUS:" -NoNewline; Write-Host " $status" -ForegroundColor Red Write-Host " > Grund: $fehlerGrund" -ForegroundColor Red } $results += [PSCustomObject]@{ "Dateiname" = $file.Name; "Status" = $status; "Grund_bei_Fehler" = $fehlerGrund "Gelesene_Mandantennr" = $mandantenNummerAusZelle; "Gelesenes_Datum" = $datumAusZelle } } $excel.Quit() [System.Runtime.InteropServices.Marshal]::ReleaseComObject($excel) | Out-Null $results | Export-Csv -Path $outputFile -NoTypeInformation -Encoding UTF8 -Delimiter ";" Write-Host "`nFertig! Die Ergebnisse wurden in der Datei '$outputFile' gespeichert." //Author: Stefan Agethen //Letzte Bearbeitung: 2025//
skripte/rsk_pruefen_vor_spooler.txt · Zuletzt geändert: von Stefan Agethen
