Вызов дополнительных сценариев в качестве рабочих мест - PullRequest
3 голосов
/ 12 марта 2011

У меня есть главный сценарий, который пытается выполнить дополнительные сценарии для списка серверов, которые он извлекает из таблицы.Мне бы хотелось, чтобы эти дополнительные сценарии вызывались асинхронно.

Эти дополнительные сценарии требуют ряда параметров, которые я не могу за всю жизнь передать из основного сценария.

Все дочерние сценариииспользуйте следующие параметры:

param(
[string]$sqlsrv=$null,
[string]$db=$null,
[string]$server=$null,
[string]$instance=$null
)

Эти значения генерируются главным сценарием.Я могу легко вызвать любой из дочерних сценариев из командной строки следующим образом:

. \ Serverstatus.ps1 test test1 test2 test3 Где test, test1, test2, test3 являются значениями параметров.

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

Start-Job serverstatus.ps1 $sqlsrv $db $server $instance

Я получаю эту ошибку:

`Start-Job : Cannot bind parameter 'InitializationScript'.
Cannot convert the "TESTSERVER" value of type "System.String" to type System.Management.Automation.ScriptBlock".
    At C:\SQLPS\ServerList.ps1:69 char:12
        + Start-Job <<<<  serverstatus.ps1 $sqlsrv $db $server $instance
        + CategoryInfo          : InvalidArgument: (:) [Start-Job], ParameterBindingException
        + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.StartJobCommand`

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

* РЕДАКТИРОВАТЬ *

Хорошо, используя ваш пример, я пытаюсь сделать то же самое.вот мои результаты.Вывод Receive-Job меня убивает.Кажется, я не могу получить от этого ничего значимого.

ProcessServers.ps1

{Gathers a list of servers and instances}
Start-Job -FilePath .\serverstatus.ps1 -ArgumentList $sqlsrv,$destdb,$server,$instance

Если я просто записываю-вывод в строке Start-Job, всепеременные правильно заполнены, как и ожидалось.Вывод выглядит так:

Start-Job -FilePath .\GetServerDetails.ps1 -ArgumentList RADC00,ServerHistory,RADCHR01,RADCHR01

В целях тестирования я изменил GetServerDetails.ps1, чтобы просто выводить переданные параметры.Выглядит это так:

GetServerDetails.ps1

param($sqlsrv,$db,$server,$instance)
"Parameters are: $sqlsrv, $destdb, $server, $instance"

Так из командной строки я запускаю:

Start-Job -FilePath .\GetServerDetails.ps1 -ArgumentList RADC00,ServerHistory,RADCHR01,RADCHR01

Вместо вывода вродевы получаете, я получаю это:

PS C:\SQLPS> Start-Job -FilePath .\GetServerDetails.ps1 -ArgumentList RADC00,ServerHistory,RADCHR01,RADCHR01

Id              Name            State      HasMoreData     Location             Command
--              ----            -----      -----------     --------             -------
37              Job37           Running    True            localhost            param($sqlsrv,$destdb,...

PS C:\SQLPS> Receive-Job -id 37
PS C:\SQLPS>

1 Ответ

3 голосов
/ 12 марта 2011

Используйте параметр -ArgumentList для Start-Job, чтобы передать ваши параметры.Параметр ArgumentList должен быть последним параметром для этой команды, например:

PS> Get-Content script.ps1
param($p1, $p2, $p3)

"p1 is $p1, p2 is $p2, p3 is $p3"

PS> Start-Job -FilePath .\script.ps1 -ArgumentList 1,"2",(get-date)

Id    Name State      HasMoreData     Location  Command
--    ---- -----      -----------     --------  -------
1     Job1 Running    True            localhost param($p1, $p2, $p3)...


PS> Receive-Job -id 1
p1 is 1, p2 is 2, p3 is 03/11/2011 16:42:26
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...