У меня есть основной скрипт, который импортирует модуль \ путь \ к \ functions.psm1, я вызываю функцию в основном скрипте с именем: Run_Scans $ ServerList, который взят из functions.psm1, из Run_Scans я пытаюсь вызвать две другие функции (Scan1 , Scan2) с помощью Start-Job, но не может передать переменную серверов другим функциям. Я пробовал несколько разных способов: либо задание не выполняется, либо завершается, но список серверов проходит. Любая помощь будет принята с благодарностью.
#This is from the main script#
Import-Module "path\to\Functions.psm1"
Run_Scans $ServerList
#This is from functions.psm1#
Function Run_Scans ($Servers){
#Start-Job -Name 'Scan1' -ScriptBlock {Run_Scan1 $using:Servers}
#Start-Job -Name 'Scan2' -ScriptBlock {Run_Scan2 $using:Servers}
$Scan = {
param ($Servers)
Run_Scan1 $Servers
Run_Scan2 $Servers
}
Start-Job -ScriptBlock $Scan -ArgumentList $Servers
}
Function Run_Scan1 ($Servers){
scan code
}
Function Run_Scan2 ($Servers){
scan code
}
ОБНОВИТЬ:
Мне удалось сделать следующее:
$ServerList = "Serv1","Serv2","Serv3"
Start-Job -InitializationScript $Initialization -ScriptBlock {param($servers) echo $servers} -args (,$servers)
Receive-Job
Вывод:
Serv1
Serv2
Serv3
Но когда я пытаюсь включить вызов функции:
$Initialization = [scriptblock]::Create("Import-Module -Name 'Pathto\Functions.psm1'")
Start-Job -InitializationScript $Initialization -ScriptBlock {param($servers) Run_Scan1 $servers} -args (,$servers)
Я получаю следующие ошибки:
Термин «Run_Scan1» не распознается как имя командлета, функции, файла сценария или работающей программы.
Невозможно проиндексировать в нулевой массив.
Окончательное решение:
Start-Job -InitializationScript {Import-Module "Pathto\Functions.ps1"} -ScriptBlock { param($Servers) Run_Scan1 $Servers } -ArgumentList (,$servers)
Run_Scan1
иRun_Scan2
там не будут доступны. Кроме того, если$Servers
является массивом, вам нужно будет передать его как-ArgumentList (, $Servers)
, как показано в ответе js2010. - person mklement0   schedule 15.04.2020$HOME\Documents
, а не в текущем каталоге вызывающего абонента, поэтому обязательно учтите это вPathto\Functions.psm1
- см. этот ответ. - person mklement0   schedule 15.04.2020