Como faço para passar um scriptblock como um dos parâmetros no start-job
Eu estou tentando criar um trabalho em segundo plano, que executa um scriptblock. Eu preciso passar este scriptblock como um parâmetro, mas não consigo fazer a sintaxe funcionar. O scriptblock está sendo convertido em uma string em algum lugar ao longo do caminho.
Ele funciona bem quando eu passar o bloco de script para uma função local, mas não através de iniciar o trabalho
A seguinte sintaxe funciona:
function LocalFunction
{
param (
[parameter(Mandatory=$true)]
[ScriptBlock]$ScriptBlock
)
&$ScriptBlock | % { echo "got $_" }
}
LocalFunction -ScriptBlock { echo "hello" }
Isso gera "olá" como esperado.
Mas o seguinte falha:
$job = start-job -argumentlist { echo "hello" } -scriptblock {
param (
[parameter(Mandatory=$true)]
[ScriptBlock]$ScriptBlock
)
&$ScriptBlock | % { echo "got $_" }
}
start-sleep -s 1
receive-job $job
O erro que ele retorna é
Receive-Job : Cannot process argument transformation on parameter 'ScriptBlock'. Cannot convert the " echo "hello" " value of type "System.String" to type "System.Management.Automation.ScriptBlock".
Então, se estou lendo o erro corretamente, parece que -argumentlist está de alguma forma forçando seus argumentos em strings.
Qualquer guru do PowerShell sabe como fazer essa sintaxe funcionar?
Desde já, obrigado,
Ben