Chr*_*lan 28 powershell powershell-2.0
我正在编写一个PowerShell脚本,它将使用Invoke-Command及其-ScriptBlock
参数在远程主机上执行命令.例如,
function Foo {
...
return "foo"
}
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo}
Run Code Online (Sandbox Code Playgroud)
这很好用.我现在要做的是同样的事情,但用本地参数调用函数.例如,
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)}
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
Invoke-Command:无法验证参数'ScriptBlock'的参数.参数为null.提供非null参数并再次尝试该命令.
如何使用-ScriptBlock
带有参数的本地函数的Invoke-Command ?
我意识到我可以将整个函数和参数包装在一个大的代码块中,但在我看来,这并不是一种干净的方式.
man*_*lds 45
我想你想要:
function Foo ( $a,$b) {
$a
$b
return "foo"
}
$x = "abc"
$y= 123
Invoke-Command -Credential $c -ComputerName $fqdn -ScriptBlock ${function:Foo} -ArgumentList $x,$y
Run Code Online (Sandbox Code Playgroud)
您可以将函数包装在一个块中并传递该块;
$a = {
function foo{}
foo($args)
}
$a.invoke() // Locally
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock $a //remotely
Run Code Online (Sandbox Code Playgroud)
但这并不优雅.
归档时间: |
|
查看次数: |
61674 次 |
最近记录: |