2015-02-03 3 views
0

Я бы очень хотел использовать функцию Split-Job для дроссельной заслонки или запуска одного и того же блока сценариев параллельно, так что это происходит быстрее. Это особенно полезно, когда мне нужно запустить несколько раз одну и ту же команду копирования на разных входах.PowerShell Split-Job пустой элемент трубы не разрешен

Код можно найти here и всегда выкладывает следующую ошибку:

An empty pipe element is not allowed. 
    + CategoryInfo   : ParserError: (:) [], ParentContainsErrorRecordException 
    + FullyQualifiedErrorId : EmptyPipeElement 

Я знаю, что проблема находится внутри этой функции, но я не могу решить:

function Init ($InputQueue){ 
    # Create the shared thread-safe queue and fill it with the input objects 
    $Queue = [Collections.Queue]::Synchronized([Collections.Queue]@($InputQueue)) 
    $QueueLength = $Queue.Count 
    # Do not create more runspaces than input objects 
    if ($MaxPipelines -gt $QueueLength) {$MaxPipelines = $QueueLength} 
    # Create the script to be run by each runspace 
    $Script = "Set-Location '$PWD'; " 
    $Script += { 
     $SplitJobQueue = $($Input) 
     & { 
      trap {continue} 
      while ($SplitJobQueue.Count) {$SplitJobQueue.Dequeue()} 
     } | 
    }.ToString() + $Scriptblock 

    # Create an array to keep track of the set of pipelines 
    $Pipelines = New-Object System.Collections.ArrayList 

    # Collect the functions and aliases to import 
    $ImportItems = ($Function -replace '^','Function:') + 
     ($Alias -replace '^','Alias:') | 
     Get-Item | select PSPath, Definition 
    $stopwatch = New-Object System.Diagnostics.Stopwatch 
    $stopwatch.Start() 
} 

Благодарим вас за помощь. Потому что эта небольшая функция может помочь мне, если она будет работать.

ответ

0

В этом разделе:

$Script += { 
     $SplitJobQueue = $($Input) 
     & { 
      trap {continue} 
      while ($SplitJobQueue.Count) {$SplitJobQueue.Dequeue()} 
     } | 
    }.ToString() + $Scriptblock 

Там не наблюдается никаких оснований для этого трубопровода, чтобы быть там.

+0

Это правильно, но когда я удаляю его из функции, он вообще не работает. – DarkLite1

+0

Кажется, что в этом вопросе недостаточно информации, чтобы определить, почему он не работает, если вы удалите это. Я могу только сказать вам, почему вы получаете эту ошибку, и как это исправить. – mjolinor

+0

Я отказался от этого, и тем временем я создал свою собственную работу дроссельной заслонки, поскольку этот был сложным. В любом случае, за вашу постоянную поддержку, я очень ценю это. – DarkLite1

Смежные вопросы