Benutzer mit den meisten Antworten
Zippen mit Powershell Pack (Aufruf aus Batch)

Frage
-
Hallo,
ich bin noch absoluter Anfänger in Sachen Powershell, da bisher Batch-Dateien stets ausreichend waren.
Folgende Problemstellung:
Auf einem Win2008 R2 Server werden Datenbank-Dumps erstellt, die jeweils 3,5GB groß sind. Diese Dumps sollen automatisiert gezippt werden,da sie dann nur noch etwa 300MB groß sind. - Es werden die Dumps der letzten 3 Tage direkt auf dem Server aufbewahrt, ältere sollen automatisiert gelöscht werden.
Ich habe mir das "Powershell-Pack", welches die ZIP-Funktion beherrscht bereits heruntergeladen und installiert. Folgender PS1-Skript funktioniert auch super, sofern man es direkt aus der Powershell aufruft:
Import-Module FileSystem Copy-ToZip -File "C:\DBDumps\db.bak" -zipfile "C:\ZIPDMP\db.zip"
Wenn ich dieses Skript aber so über eine Batchdatei aufrufe, wird nur eine 1KB große ZIP-Datei erstellt da sich das ganze scheinbar sofort wieder schließt:
powershell.exe -command "C:\DB_Zipper\startzip.ps1"
Wenn ich den Batchaufruf so ändere, funktioniert wieder alles, aber das Batchfenster bleibt unendlich offen:
powershell.exe -noexit -command "C:\DB_Zipper\startzip.ps1"
Jetzt die Frage, wie kann ich das Problem lösen ?
Der Powershell-Prozess "weiß" scheinbar gar nicht, dass er mit dem zippen noch nicht fertig ist und schließt sich bevor das ZIP komplett ist.
- Bearbeitet 4eversr Freitag, 31. August 2012 09:31
Antworten
-
Hallo,
hier ein paar Hinweise.
Gruß
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Montag, 3. September 2012 15:57
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 5. September 2012 18:32
-
Schau mal hier in die Dokumentation zur PowerShell.exe:
http://technet.microsoft.com/de-de/library/dd315276.aspx
Der Parameter –Command ist nicht für den aufrufe von Scripten vorgesehen (auch wenn es Funktioniert!)
Hier wird das Skript als Kommando aufgerufen und nicht als Skript! (Ist schwer zu verstehen ich weiss…)
Der Parameter –File ist dein Freund!
Richtig:
PowerShell.exe -File "C:\DB_Zipper\startzip.ps1"
Wie du schon gemerkt hast, hat PowerShell leider keine Cmdlets zur (ZIP) kompression.
Deshalb ist es hier eine überlegung wert, nicht PowerShell dafür zu nutzen.
In der folgenden verlinkten Diskusion nutzen wir 7Zip und PowerShell synchron mit dem Parameter -Wait um auf die Ausführung des Zip Befehls zu warten:
http://social.technet.microsoft.com/Forums/de/powershell_de/thread/bacc849b-e3ce-4e23-8664-3f7446735cb5
(Achtung PowerShell hat einen Bug! Programme die mit einer Zahl anfangen sollten umbenannt werden!)
Bei jedem Windows ab Windows XP, Vista, Windows 7 oder höher, kann man ohne ein zusätzliches Programm oder Modul, ZIP Pakete erstellen und bearbeiten.
Sieh hier in meinem Blog:
http://www.admin-source.de/BlogDeu/450/powershell-zip-ohne-module-oder-externe-programme
Dies ist aber nur bei einer geringen Anzahl von zu komprimierenden Dateien und eine geringen Dateigrösse zu empfehlen!
Hier sind aber keine Probleme mit der synchronisation zu erwarten!Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Montag, 3. September 2012 15:57
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 5. September 2012 18:32
Alle Antworten
-
Hallo,
hier ein paar Hinweise.
Gruß
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Montag, 3. September 2012 15:57
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 5. September 2012 18:32
-
Schau mal hier in die Dokumentation zur PowerShell.exe:
http://technet.microsoft.com/de-de/library/dd315276.aspx
Der Parameter –Command ist nicht für den aufrufe von Scripten vorgesehen (auch wenn es Funktioniert!)
Hier wird das Skript als Kommando aufgerufen und nicht als Skript! (Ist schwer zu verstehen ich weiss…)
Der Parameter –File ist dein Freund!
Richtig:
PowerShell.exe -File "C:\DB_Zipper\startzip.ps1"
Wie du schon gemerkt hast, hat PowerShell leider keine Cmdlets zur (ZIP) kompression.
Deshalb ist es hier eine überlegung wert, nicht PowerShell dafür zu nutzen.
In der folgenden verlinkten Diskusion nutzen wir 7Zip und PowerShell synchron mit dem Parameter -Wait um auf die Ausführung des Zip Befehls zu warten:
http://social.technet.microsoft.com/Forums/de/powershell_de/thread/bacc849b-e3ce-4e23-8664-3f7446735cb5
(Achtung PowerShell hat einen Bug! Programme die mit einer Zahl anfangen sollten umbenannt werden!)
Bei jedem Windows ab Windows XP, Vista, Windows 7 oder höher, kann man ohne ein zusätzliches Programm oder Modul, ZIP Pakete erstellen und bearbeiten.
Sieh hier in meinem Blog:
http://www.admin-source.de/BlogDeu/450/powershell-zip-ohne-module-oder-externe-programme
Dies ist aber nur bei einer geringen Anzahl von zu komprimierenden Dateien und eine geringen Dateigrösse zu empfehlen!
Hier sind aber keine Probleme mit der synchronisation zu erwarten!Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Montag, 3. September 2012 15:57
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 5. September 2012 18:32