ScriptBlock je další z vyfikundací Microsoftu, které jsou implementované v PowerShellu. Jedná se o něco jako anonymní funkci, která jako v jiných jazycích může být přiřazena do proměnné.
ScriptBlock se vytváří pomocí složených závorek {} a stejně jako funkce může mít definované parametry a vůbec je to anonymní funkce, takže možnosti netřeba rozepisovat. Problém je však v tom, že ScriptBlok není obyčejný objekt. Jedná se o objekt, který se jmenuje System.Management.Automation.ScriptBlock. Stupidní, že. A protože je stupidní, je problém jen tak do něj něco dostat. Tedy, není to problém, ale pokud chcete, aby jste do příkazu Invoke-Command mohli dostat do parametru -ScriptBlock proměnnou a ta se správně vyhodnotila, je zapotřebí String, který do něj je potřeba předat, přetypovat na ScriptBlock. Jenže jak na to? No naštěstí docela jednoduše, jen je potřeba vědět, jak se to dělá.
$yourString = "dir c:\" $scriptBlock = [Scriptblock]::Create($yourString) Invoke-Command -ScriptBlock $scriptBlock
V PS je možnost vytvořit statický ScriptBlock to se dělá takto
$i = 123 $scriptBlock = { $i }.GetNewClosure() $i = 321 & $scriptBlock