У меня есть главный скрипт, который импортирует модуль \ path \ to \ 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» не распознается как имя командлета, функции, файла сценария или работающей программы.
Невозможно индексировать в пустой массив.
FINAL Решение:
Start-Job -InitializationScript {Import-Module "Pathto\Functions.ps1"} -ScriptBlock { param($Servers) Run_Scan1 $Servers } -ArgumentList (,$servers)