如何将本地带有参数的函数,发送到远程机器上执行。
比如:
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 在远程回话定义它了。