Jak przekazać blok skryptów jako jeden z parametrów zadania początkowego
Próbuję utworzyć zadanie w tle, które wykonuje blok skryptów. Muszę przekazać ten skrypt jako parametr, ale wydaje mi się, że nie działa poprawnie składnia. Blok skryptowy jest konwertowany na ciąg znaków gdzieś po drodze.
Działa dobrze, gdy przekazuję blok skryptu do funkcji lokalnej, ale nie przez zadanie początkowe
Działa następująca składnia:
function LocalFunction
{
param (
[parameter(Mandatory=$true)]
[ScriptBlock]$ScriptBlock
)
&$ScriptBlock | % { echo "got $_" }
}
LocalFunction -ScriptBlock { echo "hello" }
Wyjścia „zostały przywitane” zgodnie z oczekiwaniami.
Ale następujące błędy:
$job = start-job -argumentlist { echo "hello" } -scriptblock {
param (
[parameter(Mandatory=$true)]
[ScriptBlock]$ScriptBlock
)
&$ScriptBlock | % { echo "got $_" }
}
start-sleep -s 1
receive-job $job
Błąd, który zwraca
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".
Jeśli więc czytam błąd, wygląda na to, że -argumentlist w jakiś sposób wymusza swoje argumenty na łańcuchach.
Dowolni guru PowerShell wiedzą, jak wykonać tę składnię?
Z góry dziękuję,
Ben