PGP Verschlüsselung mit PowerShell
Hallo @ll,
ich hoffe sehr ihr könnt mir kurzfristig helfen.
Folgendes Problem:
Ich habe diverse CSV-Dateien die ich bisher in PowerShell manuell mit PGP verschlüssle. Jetzt würde ich gerne ein autom. Skript erstellen, damit die Dateien nach und nach verschlüsselt werden. Dabei sollte auch das Datum der Datei autom. angepasst werden.
Aktuell habe ich folgende Schritte, die ich immer manuell durchführe:
1. Ich schaue im Ordner C:\PGP\Archiv\ nach, ob sich irgendwelche alten *.csv Dateien befinden. Wenn ja, lösche ich diese.
2. Anschließend schaue ich im Ordner C:\PGP\ nach, ob sich aktuelle CSV-Dateien befinden *_20240402.csv (immer aktuelles Datum). Wenn ja, verschiebe ich diese in den Ordner C:\PGP\Archiv\
3. Ändere ich im String (für PowerShell) immer das Datum auf den aktuellen Tag (Montag bis Freitag)
4. Samstag und Sonntag erfolgt keine Verarbeitung
5. Öffne ich PowerShell
6. Kopiere ich den ersten String in PowerShell und führe den aus, anschließend kopiere ich den nächsten String usw.
7. Anschließend verschiebe ich manuell alle *.csv.pgp Dateien vom Ordner C:\PGP\Archiv\ in den übergeordneten Ordner C:\PGP\
8. Schließe ich PowerShell wieder
Aktueller String, den ich manuell in PowerShell nacheinander einfüge:
.\GnuPG\bin\gpg.exe -e -r ABCDEFGH -o C:\PGP\Archiv\Test01_20240402.csv.pgp C:\PGP\Archiv\Test01_20240402.csv
.\GnuPG\bin\gpg.exe -e -r ABCDEFGH -o C:\PGP\Archiv\Test02_20240402.csv.pgp C:\PGP\Archiv\Test02_20240402.csv
.\GnuPG\bin\gpg.exe -e -r ABCDEFGH -o C:\PGP\Archiv\Test03_20240402.csv.pgp C:\PGP\Archiv\Test03_20240402.csv
.\GnuPG\bin\gpg.exe -e -r ABCDEFGH -o C:\PGP\Archiv\Test04_20240402.csv.pgp C:\PGP\Archiv\Test04_20240402.csv
Code den ich verwende, um es zu automatisieren, aber nicht funktioniert:
Habe den o.a. Code mit 10 CSV-Dateien getestet und sobald ich das Skript mit PowerShell ausführe passiert folgendes:
1. Alle CSV-Dateien werden aus dem Ordner C:\PGP\ARCHIV gelöscht … passt/richtig so
2. Alle aktuellen CSV-Dateien aus dem Ordner C:\PGP werden in den Ordner C:\PGP\ARCHIV verschoben … passt/richtig so
3. Die erste CSV-Datei aus dem Ordner C:\PGP\ARCHIV wird mit PGP verschlüsselt und als *.csv.pgp in dem Ordner C:\PGP abgelegt ... passt/richtig so
4. Der Cursor bleibt in PowerShell stehen und blinkt nur ... heißt, die zweite CSV-Datei wird nicht mehr verschlüsselt und es geht nicht weiter
Kann es sein, dass sich das Skript hier verschluckt, weil er wieder versucht, die erste CSV-Datei zu verschlüsseln und merkt aber, dass diese bereits als verschlüsselte Datei Test01_20240402.csv.pgp existiert und macht nicht mehr weiter?
Leider komme ich selbst nicht weiter. Habe es versucht und scheitere immer wieder.
Ich hoffe sehr, ihr könnt mir helfen.
Vielen lieben Dank
ich hoffe sehr ihr könnt mir kurzfristig helfen.
Folgendes Problem:
Ich habe diverse CSV-Dateien die ich bisher in PowerShell manuell mit PGP verschlüssle. Jetzt würde ich gerne ein autom. Skript erstellen, damit die Dateien nach und nach verschlüsselt werden. Dabei sollte auch das Datum der Datei autom. angepasst werden.
Aktuell habe ich folgende Schritte, die ich immer manuell durchführe:
1. Ich schaue im Ordner C:\PGP\Archiv\ nach, ob sich irgendwelche alten *.csv Dateien befinden. Wenn ja, lösche ich diese.
2. Anschließend schaue ich im Ordner C:\PGP\ nach, ob sich aktuelle CSV-Dateien befinden *_20240402.csv (immer aktuelles Datum). Wenn ja, verschiebe ich diese in den Ordner C:\PGP\Archiv\
3. Ändere ich im String (für PowerShell) immer das Datum auf den aktuellen Tag (Montag bis Freitag)
4. Samstag und Sonntag erfolgt keine Verarbeitung
5. Öffne ich PowerShell
6. Kopiere ich den ersten String in PowerShell und führe den aus, anschließend kopiere ich den nächsten String usw.
7. Anschließend verschiebe ich manuell alle *.csv.pgp Dateien vom Ordner C:\PGP\Archiv\ in den übergeordneten Ordner C:\PGP\
8. Schließe ich PowerShell wieder
Aktueller String, den ich manuell in PowerShell nacheinander einfüge:
.\GnuPG\bin\gpg.exe -e -r ABCDEFGH -o C:\PGP\Archiv\Test01_20240402.csv.pgp C:\PGP\Archiv\Test01_20240402.csv
.\GnuPG\bin\gpg.exe -e -r ABCDEFGH -o C:\PGP\Archiv\Test02_20240402.csv.pgp C:\PGP\Archiv\Test02_20240402.csv
.\GnuPG\bin\gpg.exe -e -r ABCDEFGH -o C:\PGP\Archiv\Test03_20240402.csv.pgp C:\PGP\Archiv\Test03_20240402.csv
.\GnuPG\bin\gpg.exe -e -r ABCDEFGH -o C:\PGP\Archiv\Test04_20240402.csv.pgp C:\PGP\Archiv\Test04_20240402.csv
Code den ich verwende, um es zu automatisieren, aber nicht funktioniert:
$folder = 'C:\PGP'
$archiv = 'C:\PGP\ARCHIV'
remove-item -Path "$archiv\*.csv" -Force -EA SilentlyContinue
move-item -Path "$folder\*_$(get-date -f yyyyMMdd).csv" -Destination $archiv -EA SilentlyContinue -Force
foreach ($file in Get-ChildItem -Path $archiv -File -Filter *.csv){
start-process ".\GnuPG\bin\gpg.exe" -ArgumentList "-e -r ABCDEFGH -o `"$($folder)\$($file.Name).pgp`" `"$($file.Fullname)`"" -nonewwindow -wait
}
Habe den o.a. Code mit 10 CSV-Dateien getestet und sobald ich das Skript mit PowerShell ausführe passiert folgendes:
1. Alle CSV-Dateien werden aus dem Ordner C:\PGP\ARCHIV gelöscht … passt/richtig so
2. Alle aktuellen CSV-Dateien aus dem Ordner C:\PGP werden in den Ordner C:\PGP\ARCHIV verschoben … passt/richtig so
3. Die erste CSV-Datei aus dem Ordner C:\PGP\ARCHIV wird mit PGP verschlüsselt und als *.csv.pgp in dem Ordner C:\PGP abgelegt ... passt/richtig so
4. Der Cursor bleibt in PowerShell stehen und blinkt nur ... heißt, die zweite CSV-Datei wird nicht mehr verschlüsselt und es geht nicht weiter
Kann es sein, dass sich das Skript hier verschluckt, weil er wieder versucht, die erste CSV-Datei zu verschlüsseln und merkt aber, dass diese bereits als verschlüsselte Datei Test01_20240402.csv.pgp existiert und macht nicht mehr weiter?
Leider komme ich selbst nicht weiter. Habe es versucht und scheitere immer wieder.
Ich hoffe sehr, ihr könnt mir helfen.
Vielen lieben Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4337778743
Url: https://administrator.de/forum/pgp-verschluesselung-mit-powershell-4337778743.html
Ausgedruckt am: 05.04.2025 um 22:04 Uhr
10 Kommentare
Neuester Kommentar
Moin,
kannst Du bitte 'code' verwenden, siehe hier
und Deinen Beitrag in der Art bearbeiten -
Danke
BM
kannst Du bitte 'code' verwenden, siehe hier
$folder = 'C:\PGP'
$archiv = 'C:\PGP\ARCHIV'
remove-item -Path "$archiv\*.csv" -Force -EA SilentlyContinue
move-item -Path "$folder\*_$(get-date -f yyyyMMdd).csv" -Destination $archiv -EA SilentlyContinue -Force
foreach ($file in Get-ChildItem -Path $archiv -File -Filter *.csv){
start-process ".\GnuPG\bin\gpg.exe" -ArgumentList "-e -r ABCDEFGH -o `"$($folder)\$($file.Name).pgp`" `"$($file.Fullname)`"" -nonewwindow -wait
}
und Deinen Beitrag in der Art bearbeiten -
Danke
BM
@blackman meint, Du sollst Codetags verwenden. Siehe die Symbole über dem Editorfenster.
Und die FAQs lesen hilft.
Gruss Penny.
Und die FAQs lesen hilft.
Gruss Penny.
Moin,
Gruß Thomas
Zitat von @Abuelito73:
warum nutzt du hier start-process, anstatt den Befehl einfach so auszuführen?start-process ".\GnuPG\bin\gpg.exe" -ArgumentList "-e -r ABCDEFGH -o `"$($folder)\$($file.Name).pgp`" `"$($file.Fullname)`"" -nonewwindow -wait
}
Kann es sein, dass sich das Skript hier verschluckt, weil er wieder versucht, die erste CSV-Datei zu verschlüsseln und merkt aber, dass diese bereits als verschlüsselte Datei Test01_20240402.csv.pgp existiert und macht nicht mehr weiter?
Genau das. Gpg arbeitet standardmäßig interaktiv. Wenn die Datei existiert wird somit gefragt, ob sie überschrieben werden soll. Deswegen sollte man immer den "--batch" Parameter verwenden, wenn man gpg per Skript verwendet. So hätte es dann "nur" eine Fehlermeldung gegeben, dass die Datei bereits existiert. Man könnte auch noch mit "--yes" das überschreiben erzwingen.Gruß Thomas
Mahlzeit,
die Nachfrage von @Abuelito73 kann ich nachvollziehen.
Vielleicht sollte man den Infotext doch ein wenig treffender wählern ... 'code' sagt aus dem Stehgreif dem neuen, nicht programmiererfahrenden Nutzer nicht sonderlich viel:
BG BM
Edit: Und er ist ja nicht der Erste ...
die Nachfrage von @Abuelito73 kann ich nachvollziehen.
Vielleicht sollte man den Infotext doch ein wenig treffender wählern ... 'code' sagt aus dem Stehgreif dem neuen, nicht programmiererfahrenden Nutzer nicht sonderlich viel:

Edit: Und er ist ja nicht der Erste ...
Zitat von @Blackmann:
Vielleicht sollte man den Infotext doch ein wenig treffender wählern ... 'code' sagt aus dem Stehgreif dem neuen, nicht programmiererfahrenden Nutzer nicht sonderlich viel
Ehrlich gesagt hast du es ihm allerdings auch nicht gerade einfach gemacht. Du postest seinen Teil ohne Zitierfunktion und sagst Bitte verwende Code.Vielleicht sollte man den Infotext doch ein wenig treffender wählern ... 'code' sagt aus dem Stehgreif dem neuen, nicht programmiererfahrenden Nutzer nicht sonderlich viel
So enstand der Eindruck, der von dir gepostete Code wäre bereits ein Lösungsvorschlag.
Imhö wäre es sinniger gewesen, seine falsch formatierten Zeilen zu zitieren und zu schreiben: Bitte verwende den "</>"-Knopf, um die Zeilen als Code zu formatieren.
So wäre es ziemlich unmissverständlich gewesen. Auch ein Verweis auf die faq Formatierungen in den Beiträgen hätte nicht geschadet.
Gruß Thomas
Zitat von @Abuelito73:
Würde es helfen, wenn die CSV-Datei, nachdem sie verschlüsselt wurde verschoben wird, damit das Skript mit der nächsten CSV-Datei machen kann? Würde dann praktisch so aussehen:
Nein. Helfen würde es, wenn du den "--batch"-Parameter ergänzt, dann würde er auch mit der nächsten Datei weiter machen. Die eigentliche Frage ist, wieso es Dateien mit gleicher Bezeichnung gibt - und, ob die bestehende Datei überschrieben werden kann oder nicht.Würde es helfen, wenn die CSV-Datei, nachdem sie verschlüsselt wurde verschoben wird, damit das Skript mit der nächsten CSV-Datei machen kann? Würde dann praktisch so aussehen:
Ich muss das Skript in Zukunft autom. über einen Task-Schedule laufen lassen.
In dem Fall solltest du den relativen Pfad zur gpg.exe durch einen absoluten Pfad ersetzen.1. Alle CSV-Dateien werden aus dem Ordner C:\PGP\ARCHIV gelöscht
Dir ist aber klar, dass dann Dateien verloren gehen können, falls das Skript aus iregendeinem Grund abbricht? Ich würde die Datei direkt nach dem verschlüsseln löschen - jedoch nur, wenn die Aktion erfolgreich war...# Pfad zur gpg.exe
$gpg = "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
$folder = 'C:\PGP'
$archiv = 'C:\PGP\ARCHIV'
move-item -Path "$folder\*_$(get-date -f yyyyMMdd).csv" -Destination $archiv -EA SilentlyContinue -Force
foreach ($file in Get-ChildItem -Path $archiv -File -Filter *.csv){
&$gpg --batch --yes -e -r ABCDEFGH -o "$folder\$($file.Name).pgp" $file.Fullname
# Datei löschen, falls erfolgreich verschlüsselt
if ($?) {Remove-Item -Path $file}
}