Использование рабочих процессов в Powershell
1171
user2676140
Я использовал только стандартный foreach
цикл, который выполняется как следует. Тем не менее, у меня есть 8-ядерный процессор и 16 ГБ оперативной памяти, и я подумал, что я буду использовать такие с Parallel.foreach
циклом. Ну, этот синтаксис работает как надо
$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 }
Достаточно просто, но не Parallel
этот синтаксис не работает, и никакая ошибка не показана, чтобы помочь мне определить, почему он не работает.
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 } }
Что я должен изменить в своем Workflow
синтаксисе, чтобы иметь возможность запустить преобразование Parallel
(кстати, если a ThrottleLimit
из 20 безумно пробовать, мы можем уменьшить это)
Вы, конечно, не можете `write-host` внутри рабочего процесса без InlineScript. что произойдет, если вы удалите все `x-host` из вашего рабочего процесса?
SimonS 8 лет назад
0
@SimonS - если я удаляю все строки записи-хоста, все равно ничего не происходит. Например, в моем окне powershell, когда код выполнялся, он зависал на строке PS C: \ Users \ Me, но когда я выполняю это, нет задержки, он сразу записывает синтаксис в окно и новый C: \ Users Строка \ Me отображается (что происходит, когда код завершил выполнение)
user2676140 8 лет назад
0
хм ... вы загружаете рабочий процесс в кеш сначала, а затем вызываете его, выполняя `ParallelTest`? рабочий процесс ведет себя как функция, поэтому его необходимо сначала загрузить в кэш, а затем вызвать.
SimonS 8 лет назад
0
@SimonS - я не уверен, что вы имеете в виду под «загрузкой рабочего процесса в кэш», но я вызываю его с помощью ParallelTest
user2676140 8 лет назад
0
вы выполняете весь свой `workflow parallelTest {#stuff}` (это загрузка в кеш), а затем выполняете `ParallelTest` (вызываете рабочий процесс). это то, что я имею в виду. Просто чтобы убедиться.
SimonS 8 лет назад
0
Ах, да, именно так я выполняю.
user2676140 8 лет назад
0
Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/42121/discussion-between-simons-and-user2676140).
SimonS 8 лет назад
0
0 ответов на вопрос
Похожие вопросы
-
6
Хорошее руководство по PowerShell, начало работы с более продвинутым использованием
-
5
Отключение звукового сигнала окна cmd
-
3
Powershell пинг до бесконечности
-
-
5
Сочетание клавиш для вставки в командной строке Windows
-
5
Какие преимущества может получить средний гик от Powershell?
-
1
Powershell: выполнить операцию для всех файлов в каталоге (foreach)
-
1
Выделение Powershell / CMD для копирования правой кнопкой мыши в Vista
-
3
Что такое Windows PowerShell?
-
5
Как сделать скрипт Powershell (или другой) для изменения разрешения экрана?
-
5
Получить текущий UNC-путь из локального пути в powershell