Verwenden von Workflows in PowerShell

1305
user2676140

Ich habe nur eine Standardschleife verwendet foreach, die so ausgeführt wird, wie sie sollte. Ich habe jedoch einen 8-Core-Prozessor und 16 GB RAM und dachte, ich würde einen solchen mit einer Parallel.foreachSchleife verwenden. Nun, diese Syntax funktioniert so, wie sie sollte

$filelist = Get-ChildItem G:\GoodFilesForServer\ -filter *.mkv $num = $filelist | measure $filecount = $num.count  $i = 0; ForEach ($file in $filelist) { $Workflow:i++; $oldfile = $file.DirectoryName + "\" + $file.BaseName + $file.Extension; $newfile = $file.DirectoryName + "\" + $file.BaseName + ".mp4";  $progress = ($Workflow:i / $filecount) * 100 $progress = [Math]::Round($progress,2) Clear-Host Write-Host ------------------------------------------------------------------------------- Write-Host Handbrake Batch Encoding Write-Host "Processing - $oldfile" Write-Host "File $Workflow:i of $filecount - $progress%" Write-Host ------------------------------------------------------------------------------- Start-Process "C:\Program Files\HandBrake\HandBrakeCLI.exe" -ArgumentList "-i `"$oldfile`" -t 1 --angle 1 -c 1 -o `"$newfile`" -f mp4 -O --decomb --modulus 16 -e x264 -q 32 --vfr -a 1 -E lame -6 dpl2 -R Auto -B 48 -D 0 --gain 0 --audio-fallback ffac3 --x264-preset=veryslow --x264-profile=high --x264-tune=`"animation`" --h264-level=`"4.1`" --verbose=0" -Wait -NoNewWindow del $oldfile } 

Einfach genug, aber es ist nicht so, dass Paralleldiese Syntax nicht funktioniert, und es wird kein Fehler angezeigt, um zu ermitteln, warum sie nicht funktioniert.

Workflow ParallelTest { $filelist = Get-ChildItem G:\GoodFilesForServer\ -filter *.mkv $num = $filelist | measure $filecount = $num.count  $i = 0; ForEach -Parallel -ThrottleLimit 20 ($file in $filelist) { $Workflow:i++; $oldfile = $file.DirectoryName + "\" + $file.BaseName + $file.Extension; $newfile = $file.DirectoryName + "\" + $file.BaseName + ".mp4";  $progress = ($Workflow:i / $filecount) * 100 $progress = [Math]::Round($progress,2) Clear-Host Write-Host ------------------------------------------------------------------------------- Write-Host Handbrake Batch Encoding Write-Host "Processing - $oldfile" Write-Host "File $Workflow:i of $filecount - $progress%" Write-Host ------------------------------------------------------------------------------- Start-Process "C:\Program Files\HandBrake\HandBrakeCLI.exe" -ArgumentList "-i `"$oldfile`" -t 1 --angle 1 -c 1 -o `"$newfile`" -f mp4 -O --decomb --modulus 16 -e x264 -q 32 --vfr -a 1 -E lame -6 dpl2 -R Auto -B 48 -D 0 --gain 0 --audio-fallback ffac3 --x264-preset=veryslow --x264-profile=high --x264-tune=`"animation`" --h264-level=`"4.1`" --verbose=0" -Wait -NoNewWindow del $oldfile } } 

Was muss ich in meiner WorkflowSyntax ändern, um die Konvertierung in Parallelausführen zu können (übrigens, wenn eine ThrottleLimitvon 20 verrückt ist, können wir das verringern)

0
Sie können ohne ein InlineScript sicherlich nicht innerhalb eines Workflows einen 'write-host' ausführen. Was passiert, wenn Sie alle 'x-host' aus Ihrem Workflow löschen? SimonS vor 8 Jahren 0
@SimonS - Wenn ich alle Write-Host-Zeilen lösche, scheint immer noch nichts zu geschehen. Wenn in meinem Powershell-Fenster beispielsweise Code ausgeführt wurde, hängte es in der PS-C: \ Users \ Me-Zeile, aber wenn ich das ausführte, wird die Syntax sofort in das Fenster und in ein neues C: \ Users geschrieben \ Me-Zeile wird angezeigt (was passiert, wenn der Code die Ausführung abgeschlossen hat) user2676140 vor 8 Jahren 0
hmm ... laden Sie den Workflow zuerst in den Cache und rufen ihn dann mit "ParallelTest" auf? Ein Workflow verhält sich wie eine Funktion, daher muss er zuerst in den Cache geladen und dann aufgerufen werden. SimonS vor 8 Jahren 0
@SimonS - Ich bin nicht sicher, was Sie mit "Laden des Workflows in den Cache" meinen, aber ich rufe es mit ParallelTest auf user2676140 vor 8 Jahren 0
Sie führen den gesamten `workflow parallelTest {#stuff}` aus (dies ist das Laden in den Cache), und dann führen Sie `ParallelTest` aus (rufen Sie den Workflow auf). das ist, was ich meine. Nur um sicher zu gehen. SimonS vor 8 Jahren 0
Ah ja, genau das mache ich jetzt. user2676140 vor 8 Jahren 0
Lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/42121/discussion-between-simons-and-user2676140). SimonS vor 8 Jahren 0

0 Antworten auf die Frage