2014-09-10 1 views
0

Я уже несколько дней стучу головой о стену, пытаясь заставить начать работу и фоновые задания безрезультатно.Powershell: рекурсивные функции и несколько параметров в стартовом задании

Я пробовал ScriptBlock и ScriptFile, но ни один из них не выполняет то, что я хочу, или я не могу получить синтаксис правильно.

У меня есть ряд рекурсивных функций и вам нужно разделить скрипт на параллельную работу по нескольким частям большего набора данных.

Независимо от того, как я организую вызов Start-Job, ничего не работает, и рекурсивные функции, похоже, делают все в два раза сложнее.

Может ли кто-нибудь дать мне рабочий пример Start-Job, вызывающего рекурсивную функцию и имеющую несколько параметров, или указать мне где-нибудь там, где он существует?

Любая помощь приветствуется

+0

Непонятно, что не работает, потому что вы не показали нам никакого кода или дали нам какой-либо вывод для продолжения. Я даже не уверен, что я точно понимаю, что вы пытаетесь сделать (рекурсивно запускаете задания или просто пытаетесь запустить скрипт, который вызывает рекурсивную функцию) или почему несколько параметров вызывают трудности (что имеет несколько параметров? Рекурсивная функция или сценарий). Простой, полный пример того, что не сработало вместе с сообщениями вывода/ошибки, разрешит это. –

ответ

1

Это работает для меня:

$sb = {param($path, $currentDepth, $maxDepth) function EnumFiles($dir,$currentDepth,$maxDepth) { if ($currentDepth -gt $maxDepth) { return }; Get-ChildItem $dir -File; Get-ChildItem $dir -Dir | Foreach {EnumFiles $_.FullName ($currentDepth+1) $maxDepth}}; EnumFiles $path $currentDepth $maxDepth } 
$job = Start-Job -ScriptBlock $sb -ArgumentList $pwd,0,2 
Wait-Job $job | Out-Null 
Receive-Job $job 

Имейте в виду, ваши функции должны быть определены в ScriptBlock, так как скрипт запускается в совершенно отдельном процессе PowerShell. То же самое касается любых внешних переменных - они должны быть переданы в Start-Job через параметр -ArgumentList. Значения будут сериализованы, переданы процессу PowerShell, выполняющему задание, где они будут предоставлены скриптблоку.

+0

Да, но это не имеет нескольких параметров. Не уверен, почему это подчеркивается, но сейчас я предполагаю, что есть вызов типа EnumFiles ($ dir, $ filter), который не делает то, что думает большинство людей. –

+1

Если это так, 'Set-StrictMode -Version Latest' должен установить OP прямо. :-) –

+0

Я обновил ответ, чтобы сделать скриптблоком несколько параметров. –

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