Hallo zusammen,
ich komme mal wieder nicht weiter hier.
Ich habe eine GUI gebaut, die Mittels robocopy die Dateien eines Verzeichnisses einzeln kopieren soll.
Skriptblock für den Job und der Aufruf des Jobs sieht wie folgt aus:
foreach ($script:file_temp in $script:file_array){
### status output files
$LabelStatus1.Text = "$script:file_temp"
### copyjobScript
$script:copyjobScript = {
Param (
$script:Source = $script:src_dir_path,
$script:Destination = $script:dst_dir_path,
$script:File = $script:file_temp,
$script:log = $script:robolog_backup
)
Write-Host "Source: $script:Source"
Write-Host "Destination: $script:Destination"
Write-Host "File: $script:File"
# Write-Host "robolog: $script:log"
### copy files per directory
# Write-Host "robocopy $script:Source $script:Destination $script:File /e /mir /r:3 /w:5 /Log+:$script:log"
robocopy "$script:Source" "$script:Destination" "$script:File" /e /mir /r:3 /w:5 /l /Log+:$script:log
Get-Process robocopy
}
### starte copy job
$script:copyjob = Start-Job -Name CopyJob -ScriptBlock $script:copyjobScript -ArgumentList $script:src_dir_path,$script:dst_dir_path,$script:file_temp,$script:robolog_backup
Get-Job | Receive-Job
# Get-Process robocopy
### wait for the end of the job, but further react to events
$running = @(Get-Job | Where-Object { $_.State -eq 'Running' })
if ($running.Count -le 1) {
Do {[System.Windows.Forms.Application]::DoEvents()} Until ($script:copyjob.State -ne "Running")
}else{
$running | Wait-Job
}
Ich habe in der GUI einen Cancel-Button, der den Kopiervorgang nach Wunsch unterbrechen/abbrechen soll (Get Job | Stop-Job). Das funktioniert aber irgendwie nicht. Ich habe bereits eine GUI gebaut, bei der robocopy Verzeichnisweise kopiert. Dort funktioniert
das Unterbrechen des Kopiervorgangs.
Ist der Job oder der robocopy Prozess jetzt zu schnell, um Ihn zu unterbrechen oder irgendwie abzugreifen? Auch wenn ich es selber nicht glauben kann, dass es damit etwas zu tun hat, aber eine andere Erkärung habe ich für mich gerade nicht parat.
Die Dateien in den Verzeichnissen sind überwiegend kleinere Dateien, ein Kopiervorgang also schnell erledigt sein dürfte pro Datei.
Ich habe im Skriptblock, als auch danach mal ein Get-Process eingebaut, um den robocopy Prozess eventuell abgreifen zukönnen, um robocopy vielleicht einfach zu "killen". Als Rückmeldung bekomme ich aber nur, dass der Prozess robocopy nicht gefunden
werden kann.
Jemand eine Idee oder einen Tipp, wie ich entweder den Kopiervorgang unterbreche, in dem ich die Jobs lösche/kille oder den robocopy Prozess kille? Während des erstellens des Threads hier, kam mir gerade noch die Idee, eventuell irgendwie die foreach ($script:file_temp
in $script:file_array){ zu unterbrechen, auch wenn ich gerade noch nicht genau weiss wie.
Vielleicht sehe ich auch gerade vor lauter Bäumen den Wald nicht mehr. Wäre auch nicht das erste Mal.
Wäre für jeden Tipp, Denkanstoß und Rat dankbar.
Vielen Dank.
Gruß
Christian