У меня есть сложная функция PowerShell, которую я хотел бы запустить в других потоках.
Однако, если я прав, функция не может быть доступна в блоке сценариев. Я хочу избежать копирования каждой связанной функции рядом с ней.
Есть ли способ или метод вызвать функцию в блоке сценария?
function Function1 {
Param()
Process {
$param1 = "something"
$pool = [RunspaceFactory]::CreateRunspacePool(1, [int]$env:NUMBER_OF_PROCESSORS + 1)
$pool.ApartmentState = "MTA"
$pool.Open()
$runspaces = @()
$scriptblock = {
Param (
[Object] [Parameter(Mandatory = $true)] $param1
)
Complex_Function -param1 $param1
}
1..10 | ForEach-Object {
$runspace = [PowerShell]::Create()
$null = $runspace.AddScript($scriptblock)
$null = $runspace.AddArgument($param1)
$runspace.RunspacePool = $pool
$runspaces += [PSCustomObject]@{ Pipe = $runspace; Status = $runspace.BeginInvoke() }
}
while ($runspaces.Status -ne $null) {
$completed = $runspaces | Where-Object { $_.Status.IsCompleted -eq $true }
foreach ($runspace in $completed) {
$runspace.Pipe.EndInvoke($runspace.Status)
$runspace.Status = $null
}
}
$pool.Close()
$pool.Dispose()
}
}
function Complex_Function {
Param(
[Object] [Parameter(Mandatory = $true)] $param1
)
Process {
#several function calls
}
}
complex_function
в свой блок скриптов. Вы можете попробовать: stackoverflow.com /вопросы/22129621/ - person Clijsters   schedule 13.08.2018Invoke-Command -ScriptBlock ${Function:Complex_Function} -ArgumentList 'arg1','arg2'
. Я нашел блог об этом здесь - person Theo   schedule 13.08.2018