Jump to content

Zweiten Befehl im Script erst ausführen wenn der Erste abgearbeitet wurde


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

Empfohlene Beiträge

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?
 

 

 

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar

@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?

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...