У меня есть главный сценарий, который пытается выполнить дополнительные сценарии для списка серверов, которые он извлекает из таблицы.Мне бы хотелось, чтобы эти дополнительные сценарии вызывались асинхронно.
Эти дополнительные сценарии требуют ряда параметров, которые я не могу за всю жизнь передать из основного сценария.
Все дочерние сценариииспользуйте следующие параметры:
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>