Jump to content

Powershell - ForEach-Object -> sequentiell


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

 

wollte mal kurz nachhören ob jemand was dazu weiß. Ich lasse mir aus einem Verzeichnis Dateien anzeigen die mit 7-Zip komprimiert werden sollen.

 

Das klappt auch wunderbar nur die PS arbeitet das nicht sequentiell ab sondern parallel :-( ... der macht mir also bei 4 Dateien 4 Zip-Tasks auf.

 

Kann man das so einrichten das die Dateien nacheinander abgearbeitet werden???

 

Es ist ja so wenn ich danach noch eine Befehlszeile schreibe und die ist zum Löschen der nicht gezippten Dateien gedacht macht der das auch direkt und 7-Zip greift voll ins Klo.

 

Bedeutet der will die Daten Zippen und aber auch direkt löschen. Die Powershell bekommt das denke ich mal nicht mit was 7-Zip da gerade abarbeitet.

 

Get-ChildItem -Path B:\...... -Exclude *.zip | ForEach-Object -Process {C:\Programme\7-Zip\7zG.exe a -tzip $_'.zip' $_}

bearbeitet von gearloose
Link zu diesem Kommentar

Moin,

 

ich kann dir dazu die PowerShell Community Extensions ans Herz legen.

Dort gibt es Write-Zip

 

Write-Zip -OutputPath "C:\tmp\zip\files.zip" -Path "C:\tmp\zip\*"

 

Bei diesem Aufruf werden alle Files unter C:\tmp\zip in das Archiv C:\tmp\zip\files.zip geschrieben.

Gucks dir mal na.

 

Ansonsten hast du einen kleinen Denkfehler in deinem Syntax. Du rufst zu jedem File den Prozess auf, daher bekommst du x-Archive raus.

 

dir "C:\tmp\zip\" -Recurse -Include "*.txt" | Write-Zip -OutputPath "C:\tmp\zip\files.zip"

So könnte es auch gehen, du kannst halt an C:\Programme\7-Zip\7zG.exe a -tzip keine Objekte oder eine FileList übergeben.

Link zu diesem Kommentar
Stimmt..danke :-) ich denke wirte-Zip löst da mein Problem...teste das mal aus.

 

Dann klappt auch das anschließende Löschen der Dateien ohne zeitlich schon vorzugreifen. :D

 

Auf die schnelle fällt mir das ein:

dir "C:\tmp\zip\" -Recurse -Include "*.txt" -OutVariable files | Write-Zip -OutputPath "C:\tmp\zip\files.zip"
remove-item $files

 

Ich wüsste grad nicht, wie man das noch pipen könnte.

Link zu diesem Kommentar
Wieso nutzt man nicht die Funktion des Zippers (k.A. ob write-zip das kann) die Daten zu verschieben statt kopieren? Dabei sorgt sich der Zipper um das löschen und das nicht löschen beim Fehler (kein Platz mehr für Zip Files).

 

Weil es Write-Zip nicht kann.

Sonst hätte ich das schon so eingekippt

 

ÜBERSICHT

PSCX Cmdlet: Create ZIP format archive files from pipline or parameter input.

 

 

SYNTAX

Write-Zip [-LiteralPath] <String[]> [[-OutputPath] <String>] [-Append] [-FlattenPaths] [-IncludeEmptyDirectories] [-Level <Nullable`1>] [-NoClobber] [-Quiet] [<CommonPar

ameters>]

 

Write-Zip -InputObject <PSObject> [[-EntryPathRoot] <String>] [-Append] [-FlattenPaths] [-IncludeEmptyDirectories] [-Level <Nullable`1>] [-NoClobber] [-Quiet] [<CommonPa

rameters>]

 

Write-Zip [-Path] <String[]> [-Append] [-FlattenPaths] [-IncludeEmptyDirectories] [-Level <Nullable`1>] [-NoClobber] [-Quiet] [<CommonParameters>]

 

Es gibt zwar in Blogs wie hier 8 bits: Create ZIP archives with PowerShell, den Befehl -removeOriginal, der scheint aber nicht mehr verfügbar zu sein.

Link zu diesem Kommentar

Hallo, habs getestet und write-zip klappt sequentiell :-) das löst das Problem!

 

Problem war ja das ich extern 7-Zip aufgerufen habe und die Powershell das ja nicht nacheinander abgearbeitet hat da es ja sozusagen kein hauseigener Prozess ist. Daher ruft man bei x Dateien x Prozesse auf.

 

Wäre auf dem Server kein Problem gewesen 32GB RAM und 2 x 4Kern Xeon.

 

...wenn man die Daten danach noch im Skript löschen will haut es dem 7-Zip die zu komprimierenden Daten unter den Füßen weg und es bricht ab.

 

get-childitem -path \...\... -include *.bak | foreach-object -process {write-zip $_}

 

Die Extensions sind ja auch schnell "installiert" einmal ins Modulverzeichnis und importiert.

 

@Dukel: Ich hab bei 7-Zip in den Commandline Options nix gefunden womit ich Dateien nach dem Zippen entfernen könnte. Wäre sogar komfortabler gewesen und für mich letzt endlich einfach. Ich muss das mit write-zip jetzt an einige Server nachziehen und dazu noch die Powershell 2.0 installieren.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...