Using Invoke-Command -ScriptBlock on a function with arguments
powershell, powershell-2.0
Solution
I think you want:
function Foo ( $a,$b) {
$a
$b
return "foo"
}
$x = "abc"
$y= 123
Invoke-Command -Credential $c -ComputerName $fqdn -ScriptBlock ${function:Foo} -ArgumentList $x,$y
Problem
I'm writing a PowerShell script that will execute commands on a remote host using Invoke-Command and its `-ScriptBlock` parameter. For example, ``` function Foo { ... return "foo" } $rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo} ``` This works fine. What I'd like to do now is the same thing, but call a function with local arguments. For example, ``` function Bar { param( [String] $a, [Int] $b ) ... return "foo" } [String] $x = "abc" [Int] $y = 123 $rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo($x,$y)} ``` But this does not work: Invoke-Command : Cannot validate argument on parameter 'ScriptBlock'. The argument is null. Supply a non-null argument and try the command again. How can I use Invoke-Command with a `-ScriptBlock` that is a local function with arguments? I realize that I can wrap the entire function and the parameters in a big code block, but that is not a clean way of doing it, in my opinion.