abuelito73
Goto Top

Autom. Skript für PowerShell

Hallo @ll,

ich hoffe sehr ihr könnt mir kurzfristig helfen face-smile

Folgendes Problem:

Ich habe 4 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. Schaue ich 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 *_20240306.csv (immer aktuelles Datum). Wenn ja, verschiebe ich diese in den Ordner C:\PGP\Archiv\
3. Ändere ich im String 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:

.\GnuPG\bin\gpg.exe -e -r ABCDEFGH -o C:\PGP\Archiv\Test01_20240306.csv.pgp C:\PGP\Archiv\Test01_20240306.csv
.\GnuPG\bin\gpg.exe -e -r ABCDEFGH -o C:\PGP\Archiv\Test02_20240306.csv.pgp C:\PGP\Archiv\Test02_20240306.csv
.\GnuPG\bin\gpg.exe -e -r ABCDEFGH -o C:\PGP\Archiv\Test03_20240306.csv.pgp C:\PGP\Archiv\Test03_20240306.csv
.\GnuPG\bin\gpg.exe -e -r ABCDEFGH -o C:\PGP\Archiv\Test04_20240306.csv.pgp C:\PGP\Archiv\Test04_20240306.csv

Leider komme ich selbst nicht weiter. Habe es versucht und scheitere immer wieder.

Ich hoffe sehr, ihr könnt mir helfen.

Vielen lieben Dank

Content-Key: 3607310865

Url: https://administrator.de/contentid/3607310865

Printed on: April 27, 2024 at 23:04 o'clock

Mitglied: 11078840001
Solution 11078840001 Mar 06, 2024, updated at Mar 07, 2024 at 10:08:34 (UTC)
Goto Top
$folder = 'C:\PGP'  
$archiv = 'C:\PGP\ARCHIV'  
remove-item -Path "$archiv\*.csv" -Force -EA SilentlyContinue  
foreach ($file in Get-ChildItem -Path $folder -File -Filter "*_$(Get-Date -f yyyyMMdd).csv"){  
  try{
    & ".\GnuPG\bin\gpg.exe" --batch --yes -er ABCDEFGH -o "$folder\$($file.Name).pgp" $file.Fullname  
    if ($?) {
        $file | move-item -Destination $archiv -force -EA Stop
    }
  }catch{
     write-host $_.Exception.Message -F Red
  }
}
Member: Abuelito73
Abuelito73 Mar 07, 2024 at 12:13:38 (UTC)
Goto Top
Hallo Abramakabra,

vielen lieben Dank für Deine schnelle Hilfe.

Ich habe es soeben getestet:

7. Anschließend verschiebe ich manuell alle *.csv.pgp Dateien vom Ordner C:\PGP\Archiv\ in den übergeordneten Ordner C:\PGP\

Dieser Punkt wird mit dem Skript leider nicht ausgeführt.

Nachdem die CSV-Dateien mit PGP verschlüsselt werden, sollen alle *.csv.pgp Dateien in den Ordner C:\PGP\ verschoben werden.

Mit Deinem Skript bleiben alle Dateien *.csv und *.csv.pgp im Ordner C:\PGP\Archiv\

Vielen Dank für Deine Mühe und Hilfe.

Viele Grüße
Mitglied: 11078840001
11078840001 Mar 07, 2024 updated at 12:21:26 (UTC)
Goto Top
Zitat von @Abuelito73:
7. Anschließend verschiebe ich manuell alle *.csv.pgp Dateien vom Ordner C:\PGP\Archiv\ in den übergeordneten Ordner C:\PGP\

Dieser Punkt wird mit dem Skript leider nicht ausgeführt.
Doch das geschieht in einem Schritt in Zeile 6, anschließendes verschieben ist dann nicht mehr nötig face-wink.
Nachdem die CSV-Dateien mit PGP verschlüsselt werden, sollen alle *.csv.pgp Dateien in den Ordner C:\PGP\ verschoben werden.

Mit Deinem Skript bleiben alle Dateien *.csv und *.csv.pgp im Ordner C:\PGP\Archiv\
Nein, Zeile 6 gibt die PGP Dateien direkt in den C:\PGP Ordner aus, anschließendes verschieben ist also überflüssig weil die Datei ja schon in C:\PGP ausgegeben wird.

Siehst du ja hier, da wird der Zieldateiname inkl. Ziel-Ordner festgelegt und das ist der Ordner C:\PGP\ + Dateiname + ".pgp"
-o `"$($folder)\$($file.Name).pgp`"
Member: Abuelito73
Abuelito73 Mar 07, 2024 at 12:20:36 (UTC)
Goto Top
Hm, komisch ... wenn ich das Skript ausführe, werden die CSV-Dateien vom Ordner C:\PGP\ nach C:\PGP\Archiv\ verschoben und anschließend auch verschlüsselt und als *.csv.pgp abgelegt, aber diese (*.csv.pgp) werden dann nicht vom Ordner C:\PGP\Archiv\ in den Ordner C:\PGP\ verschoben.
Mitglied: 11078840001
11078840001 Mar 07, 2024 updated at 12:34:23 (UTC)
Goto Top
Zitat von @Abuelito73:

Hm, komisch ... wenn ich das Skript ausführe, werden die CSV-Dateien vom Ordner C:\PGP\ nach C:\PGP\Archiv\ verschoben
Korrekt.
und anschließend auch verschlüsselt und als *.csv.pgp abgelegt, aber diese (*.csv.pgp) werden dann nicht vom Ordner C:\PGP\Archiv\ in den Ordner C:\PGP\ verschoben.
Müssen sie ja nicht weil sie direkt in C:\PGP mit dem gpg Befehl ausgegeben werden!

Klappt hier im Test wie gewünscht.
Mitglied: 11078840001
11078840001 Mar 07, 2024 updated at 13:45:23 (UTC)
Goto Top
Vermutlich hast du einen Kopier oder Anpassungsfehler im Skript gemacht, Code nochmal kopieren und richtig anpassen.
Member: Abuelito73
Abuelito73 Mar 07, 2024 at 12:58:44 (UTC)
Goto Top
Hallo Abramakabra,

sorry, mein Fehler .. tut mir leid für die Verwirrung.

Ich habe noch gestern den Code von Dir kopiert und hatte gar nicht gesehen, dass Du den heute Morgen gegen 11 Uhr nochmal angepasst hast.

Mit dem Code von heute Morgen funktioiert es PERFEKT ...

Vielen vielen lieben Dank und nochmals Sorry für die Verwirrung.

Viele Grüße
Member: Abuelito73
Abuelito73 Mar 12, 2024 at 08:25:27 (UTC)
Goto Top
Hallo Abramakabra,

entschuldige bitte, dass ich Dich nochmal deswegen störe, aber das Skript läuft leider doch nicht durch. Habe es vorher nur mit einer Datei getestet und jetzt wollte ich es mit mehrere CSV-Dateien testen, aber es bleibt hängen.

Habe es soeben 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
2. Alle aktuellen CSV-Dateien aus dem Ordner C:\PGP werden in den Ordner C:\PGP\ARCHIV verschoben .. passt
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
4. Der Cursor bleibt in PowerShell stehen und blinkt nur .. die zweite CSV-Datei wird nicht mehr verschlüsselt

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_20240312.csv.pgp existiert und macht nicht mehr weiter?

Wenn dem so ist, wäre es einfacher, wenn man die erste CSV-Datei, sobald diese verschlüsselt wurde, in ein extra Ordner verschiebt, damit sich das Skript nicht versucht die erste CSV-Datei erneut zu verschlüsseln? Zum Beispiel in den Ordner C:\PGP\ARCHIV\ARCHIV_CSV

Hier der Code, den ich verwende:

$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
}

Ich hoffe Du kannst mir hierzu weiterhelfen, ich wäre Dir auf jeden Fall sehr sehr dankbar.

Viele Grüße
Member: Abuelito73
Abuelito73 Mar 12, 2024 at 08:38:47 (UTC)
Goto Top
Hallo Abramakabra,

nochmal ich:

Falls dem so ist, dass das Skript hängen bleibt, weil es erneut versucht die erste CSV-Datei zu verschlüsseln .. wäre es evtl. einfacher wenn man das Skript so umbaut:

1. Alle CSV-Dateien werden aus dem Ordner C:\PGP\ARCHIV gelöscht
2. Alle aktuellen CSV-Dateien aus dem Ordner C:\PGP werden nicht direkt in den Ordner C:\PGP\ARCHIV verschoben, sondern nachdem diese verschlüsselt wurde

Würde dann praktisch so aussehen:

1. Die erste Datei Test01_20240312.csv aus dem Ordner C:\PGP wird mit PGP verschlüsselt und im selben Ordner C:\PGP als Test01_20240312.csv.pgp abgelegt
2. Nachdem die Datei Test01_20240312.csv erfolgreich verschlüsselt wurde, wird die Datei Test01_20240312.csv in den Ordner C:\PGP\ARCHIV verschoben
3. Die zweite Datei Test02_20240312.csv aus dem Ordner C:\PGP wird mit PGP verschlüsselt und im selben Ordner C:\PGP als Test02_20240312.csv.pgp abgelegt
4. Nachdem die Datei Test02_20240312.csv erfolgreich verschlüsselt wurde, wird die Datei Test02_20240312.csv in den Ordner C:\PGP\ARCHIV verschoben
5. usw.
Member: Abuelito73
Abuelito73 Apr 02, 2024 at 09:00:40 (UTC)
Goto Top
Hallo Abramakabra,

leider bekomme ich es nicht hin, den Code so anzupassen, dass es funktioniert.

Könntest Du mir bitte nochmal helfen?

Vielen lieben Dank und viele Grüße