DKB Kontoauszug und GitHub Copilot

Eigentlich wollte ich mich bei meiner Bank (DKB) beschweren, weil Sie die Dateinamen der Kontoauszüge mehrfach verändern. Stattdessen habe ich mir halt ein PS1-Skript mit RegEx geschrieben, um die unterschiedlichen Dateinamen zu normieren und mit VS Code hat mit die KI sehr positiv überrascht. Insofern ist die DKB-Aufgabenstellung nur der Aufhänger für eine Seite zu VSCode, PowerShell und KI-Integration.

Auslöser

Heute gehört ein Girokonto einfach dazu und neben der DKB gibt es noch viele andere Direktbanken und Filialbanken. Kontoauszugsdrucker nutze ich schon lange nicht mehr und auch wenn ich meine Auszüge mittlerweile per Software abrufe und Kontobewegungen im Smartphone sehe, lade ich einmal im Monate die "offiziellen Kontoauszüge als PDF herunter".

Leider gibt es immer noch keine Bank, die diese PDF-Dateien einfach per Mail versenden. Ein Argument wäre die fehlende Verschlüsselung, wobei es für Banken sicher einfach wäre, mir ein SMIME-Zertifikat auszustellen. Es ist wohl eher, dass die Bank den Download tracken und damit die "Zustellung" der Kontoauszüge nachweisen kann, was bei einer Mail nicht geht.

Die DKB hat im Laufe des Jahres 2023/2024 ihre Weboberfläche renoviert und umgebaut. In der neuen Oberfläche werden die Dokumente zwar schöne angezeigt, aber ich muss jede einzelne Datei anklicken. Sie öffnet sich dann im Browser mit einem komischen numerischen Namen und zusätzlich als Download.

Unten rechts war im Sep 2024 aber noch der Verweis ins "alte" Portal, der dann in einem IFrame angezeigt wird. Die kann ich mehrere Dokumente auswählen und per Download als ZIP-Archiv laden oder auch pro Datei zwischen "Anzeigen" und "Download" auswählen.

Vielleicht kommt von der DKB ja auch noch eine Weiterentwicklung im neuen Portal. Gestört hat mich aber mehr das Format der Dateinamen:

# A: altes Portal             :    Kontoauszug_1234567890_Nr_2024_001_per_05_01_2024.pdf
# B: neues Portal bis Aug 2024:    20240605_Kontoauszug_6_2024_vom_05.06.2024_zu_Konto_1234567890.pdf
# C: neues Portal ab Sep 2024 :   2024-09-05_Kontoauszug_9_2024_vom_05.09.2024_zu_Konto_1234567890.pdf

Sie sehen gut, dass alle Dateinamen die Kontonummer, eine Auszugsnummer mit Jahr und auch noch mal das Datum der Erstellung enthalten. Die unterschiedlichen Namen sortieren sich natürlich nicht schön im Explorer. Das Format A macht mir noch am ehesten Sinn, denn der Name startet mit der Dokumentart samt Kontonummer und dann die Nummer mit dem Jahr zuerst. Das Datum am Ende stört nicht.

Wenn da nun auch die anderen Format dazu kommen, dann möchte ich nicht jedes Mal von Hand die Dateien umbenennen. Das ist dann eine Aufgabe für PowerShell.

Während der Entwicklung habe ich dann gesehen, dass es wohl noch weitere Schreibweisen über die letzten Jahre gab.

VSCode

Ich habe also Visual Studio Code gestartet und im Kommentar oben erst einmal die drei unterschiedlichen Schreibweisen dokumentiert und das gewünschte Zielformat. Basierend darauf hat die KI natürlich noch nicht des kompletten Code geschrieben. Die Zeit 15 habe ich noch selbst getippt, da mir der Vorschlag nicht gefallen hat aber schon nach dem Foreach und dem Regex hat die KI verdammt gute Vorschläge gemacht.

Den ersten und zweiten Switch-Fall habe ich nur noch leicht angepasst, z.B. dass die Auszugsnummer immer dreistellt ist aber sie sehen schon den dritten Vorschlag. Der passt schon sehr gut. Nun sind Regular Expressions nicht gerade mein tägliches Geschäfts und ich musste etwas Zeit aufwänden, um den Vorschlag zu verstehen. Das ist ja das Risiko beim KI-Vorschlag: Er kann richtig sein, muss es aber nicht. Es war auch noch nicht fehlerfrei, denn nicht alle "$Matches" wurden korrekt zugeordnet und da es ein "String" war, konnte ich es nicht einfach mit {0:d3} mit führenden "0" auffüllen. Ich musste es erst zu eine Integer konvertieren.

Im auch "nicht erkannte" Dateien gemeldet zu bekommen, habe ich einfach nur "Default" getippt und die KI hat folgendes ergänzt.

Das ist nun sehr einfach zu verstehen und konnte ich mit "TAB" einfach übernehmen. Um beim Rename keinen Fehler zu machen, habe ich mit "If ($newname" anfangen wollen aber schon nach "If ($N" hat die KI mir den fertigen Code angezeigt.

Wobei auch dieser Code so nicht funktioniert, denn statt ".pdf" hätte ich "$file.extension" an die Variable "$newname" addiert. Warum die KI noch eine Variable "$newpath" belegt, nur um sie dann einmal auszugeben, bleibt wohl ihr überlassen. Beim "Rename-Item" kommt korrekterweise "$Newname" zum Einsatz. Den Code wollte ich so nicht übernehmen, denn ich hätte schon gerne vorher geprüft, ob es die Zieldatei schon gibt. Ich habe dies als Kommentar im Code geschrieben und direkt nach dem nächten "if" kam wieder Copilot mit einem passenden Vorschlag:

Den konnte ich so übernehmen, aber habe ihn danach schon noch etwas kosmetisch angepasst.

Das Skript

Für den Fall, dass Sie vor der gleichen Herausforderung stehen oder auch andere Banken und Sparkassen die Dateinamen der Kontoauszüge wechseln und ihnen damit die korrekte Sortierung im Dateisystem erschweren, können Sie mein Skript als Basis nutzen und eigene RegEx-Pattern hinterlegen.

rename-dkbkonto.ps1

Nach dem Download müssen Sie wieder die Erweiterung ".txt" und ggfls. die Internetzone mit "Unblock-File" entfernen, ehe Sie es dann in der PowerShell mit Angabe des Pfad zum Ordner aufrufen.

Einschätzung

Also ich weiß nicht, wie es ihnen geht und niemand genau weiß genau, wie eine KI arbeitet und denkt. Ich vermute einmal, dass mein Kommentar am Anfang quasi als Aufgabenbeschreibung verstanden wurde und daher die Vorschläge besser zum Ziel geführt haben. Anscheinend muss ich nicht zwingend Copilot mit einem Prompt füttern, sondern kann ihm auch als Kommentar meine Aufgabenstellung beschreiben und erhalten ziemlich gute Vorschläge, die mit helfen, wenn ich kein Vollblut-Entwickler bin. Früher habe ich dann in Powershell-Büchern, Beispielcode oder per Google auf Webseiten gesucht.

Die Codierung gibt schon sehr flüssig von der Hand, wenn man in der gleichen IDE einfach bleiben kann. Aber auch die Codevorschläge muss man schon aufmerksam kontrollieren und gerade bei REGEX-Abfragen bin ich nicht sicher, ob der Zeitgewinn so hoch war. Dennoch sollten Sie VSCode und Copilot/ChatGPT auf jeden Fall nicht unterschätzen.

Weitere Links