如何将本地带有参数的函数,发送到远程机器上执行。
比如:
function localFunc($name,$age){
write-host "$name=$name,$age=$age"
}
invoke-command -session $session -scriptblock {
localfunc -name 'xiaoniao' -age '13'
}
1 Answers
首先这样肯定是行的:
首先,这样肯定是行的。
Invoke-command -ComputerName localhost -ScriptBlock {
function localFunc($name,$age){
write-host “name=$name,age=$age”
}
localFunc -name 'xiaoxiaoJiao' -age 30
}
但是,如果有多次需要用到这个函数,总不能把它重复的复制进每一个invoke-command。
所以动态传递函数,并调用更妥一点。
function localFunc($name,$age){
write-host “name=$name,age=$age”
}
function Get-FuncDef($name)
{
$func="Function:\$name"
if(Test-Path $func)
{
return 'function {0} {{ {1} }}' -f $name,(dir $func).Definition
}
}
Invoke-command -ComputerName localhost -ScriptBlock {
param($funcDef,$name,$age)
Invoke-Expression $funcDef
localFunc -name $name -age $age
} -ArgumentList (Get-FuncDef localFunc),'xiaoxiaoJiao',30
Get-FuncDef是一个帮助函数,通过将函数的关键字,函数名,和函数体拼接成字符串,传递给远程机器,然后就可以Invoke-Expression 在远程回话定义它了。
