WPS 10 Geschrieben 22. Mai 2013 Melden Teilen Geschrieben 22. Mai 2013 Moin moin, ich hätte da mal ne Frage, da ich bei meiner Suche im Internet bis jetzt erfolglos war.Und zwar möchte ich das ein Befehl im Script erst ausführt wird wenn Befehl davor komplett abgearbeitet wurde.Ich möchte ein Datei zippen und im Anschluss diese Datei löschen. Da die Datei 3,7GB groß ist bekomme ich halt aktuell immer einen Fehler, dass er die Datei nicht löschen kann, da sie noch im Zugriff ist. Hat jemand vielleicht ne Idee wie ich das lösen könnte? Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 22. Mai 2013 Melden Teilen Geschrieben 22. Mai 2013 Macht es das nicht standardmäßig? Wie sieht denn dein Script aus? Kann es sein, dass dein Zip Tool einen Fehler bei solch einer großen Datei bringt, im Script zurückkehrt aber die Datei noch im Zugriff hat? Oder kommt der Fehler sofort nach dem starten des Zippens? Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 22. Mai 2013 Melden Teilen Geschrieben 22. Mai 2013 (bearbeitet) Hallo, um welche Art Skript handelt es sich und um welche Befehle? Ok, ist ereldigt, gesehen. bearbeitet 22. Mai 2013 von lefg Zitieren Link zu diesem Kommentar
WPS 10 Geschrieben 22. Mai 2013 Autor Melden Teilen Geschrieben 22. Mai 2013 copy-ToZip -file ($($destination[$i])+"\"+$temp) -zipfile (($($destination[$i])+"\"+$temp)+".zip"); Remove-Item ($($destination[$i])+"\"+$temp) Wenn ich Remove-Item weglasse funktioniert es, mit Remove-Item kommt dann die Meldung das die Datei im Zugriff ist. Wenn die Datei kleiner ist und das zippen schneller geht funktioniert es. Ich denke das bei Remove-Item es eine bestimmte Zeit probiert und wenn es bis dahin nicht klappt gibt es die Fehlermeldung. Sorry hatte vergessen zur erwähnen das es sich um PowerShell handelt. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 22. Mai 2013 Melden Teilen Geschrieben 22. Mai 2013 Standardmäßig wird die 2. Zeile (nach dem Strichpunkt) erst ausgeführt wenn die erste Zeile fertig ist. Das kannst du mit Start-Sleep 3 ; "Foo" nachvollziehen. Ist das Zip wirklich gezippt? Funktioniert copy-tozip? Zitieren Link zu diesem Kommentar
WPS 10 Geschrieben 22. Mai 2013 Autor Melden Teilen Geschrieben 22. Mai 2013 Wie gesagt, wenn ich Remove-Item weglasse wird das Archiv erstellt. Ich werde gleich mal Start-Sleep dazwischen setzen und gucken was dann passiert. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 22. Mai 2013 Melden Teilen Geschrieben 22. Mai 2013 Nein. Führe nur mein Beispielscript aus, dann siehst du, dass die Zeile nacheinander ausgeführt wird. (hat jetzt nichts spezielles mit deinem Problem zu tun) Ändere dein Script mal so: copy-ToZip -file ($($destination[$i])+"\"+$temp) -zipfile (($($destination[$i])+"\"+$temp)+".zip")if($?){ Remove-Item ($($destination[$i])+"\"+$temp)}else{ "Fehler"} Zitieren Link zu diesem Kommentar
WPS 10 Geschrieben 22. Mai 2013 Autor Melden Teilen Geschrieben 22. Mai 2013 @Duckel Das ist jetzt mein Script mit der Pause was funktioniert. import-module filesystem $source = "C:\Zend\Apache2\htdocs\var\log\exception.log", "C:\Zend\Apache2\htdocs\var\log\system.log" $destination = "c:\Log\exception", "c:\Log\system" $file = "exception.log", "system.log" for ($i=0; $i -lt 2; $i++) { Copy-Item $source[$i] $destination[$i] $temp= "$(Get-Date -f yyyyMMdd)_$($file[$i])" rename-item ($destination[$i]+"\"+$file[$i]) $temp copy-ToZip -file ($($destination[$i])+"\"+$temp) -zipfile (($($destination[$i])+"\"+$temp)+".zip") ; Start-Sleep 30 Remove-Item ($($destination[$i])+"\"+$temp) } Wenn ich dich richtig verstanden hatte sollte mein Script nach deinen Vorschlag nun so aussehen: import-module filesystem $source = "C:\Zend\Apache2\htdocs\var\log\exception.log", "C:\Zend\Apache2\htdocs\var\log\system.log" $destination = "c:\Log\exception", "c:\Log\system" $file = "exception.log", "system.log" for ($i=0; $i -lt 2; $i++) { Copy-Item $source[$i] $destination[$i] $temp= "$(Get-Date -f yyyyMMdd)_$($file[$i])" rename-item ($destination[$i]+"\"+$file[$i]) $temp copy-ToZip -file ($($destination[$i])+"\"+$temp) -zipfile (($($destination[$i])+"\"+$temp)+".zip") if($?){ Remove-Item ($($destination[$i])+"\"+$temp) }else{ "Fehler" } } Da kommt es dann aber zur besagten Fehlermeldung:Remove-Item :Das Element C:\Log\system\20130522_system.log kann nicht entfernt werden: Der Prozess kann nicht auf die Datei "C:\Log\system\20130522_system.log" zugreifen, da sie von einem anderen Prozess verwendet wird. Hab ich dich jetzt noch irgendeinen Fehler drin den ich grad nicht seh? Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 22. Mai 2013 Melden Teilen Geschrieben 22. Mai 2013 Mit Pause funktioniert es? Dann gibt's wohl ein Problem mit Copy-ToZip. Ich würde evtl. einen anderen Zip Mechanismus nutzen oder die Pause drin lassen. Zitieren Link zu diesem Kommentar
WPS 10 Geschrieben 22. Mai 2013 Autor Melden Teilen Geschrieben 22. Mai 2013 Danke für deine Hilfe! Ich werd wohl die Pause drinnen lassen, kommt ja nicht auf die Minute an. Kannst du mir noch sagen was if($?) aus deinen Vorschlag bedeutet? Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 22. Mai 2013 Melden Teilen Geschrieben 22. Mai 2013 $? ist der letzte Status (erfolgreich oder nicht erfolgreich). Aber wenn Copy-ToZip keinen Fehler bringt und trotzdem einen Prozess offen lässt würde ich das austauschen. Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 22. Mai 2013 Melden Teilen Geschrieben 22. Mai 2013 Hallo,du kannst auch WaitForExit einsetzen $Notepad = Get-Process $ProcessName -ComputerName $ComputerName $Notepad.WaitForExit() "Notepad wurde am {0} beendet" -f $(Get-Date) "Jetzt gehts weiter" blub Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 22. Mai 2013 Melden Teilen Geschrieben 22. Mai 2013 Wird dann nur hässlich da der TO kein Programm sondern ein cmdlet ausführen möchte. Da müsste er Powershell mit dem Scriptteil starten (oder einen anderen Zipper verwenden). An Start-Process -wait hatte ich auch schon gedacht. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.