PowerShell 如何将本地函数传递给远程机器执行?


PowerShell交流中心分类: 远程管理PowerShell 如何将本地函数传递给远程机器执行?
0
匿名用户 asked 10 年 ago

如何将本地带有参数的函数,发送到远程机器上执行。
比如:

function localFunc($name,$age){
 write-host "$name=$name,$age=$age"
 }
 invoke-command -session $session -scriptblock {
 localfunc -name 'xiaoniao' -age '13'
 }
1 Answers
0
Mooser Lee 管理员 answered 10 年 ago

首先这样肯定是行的:
首先,这样肯定是行的。

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

 

Mooser Lee 管理员 replied 10 年 ago

Get-FuncDef是一个帮助函数,通过将函数的关键字,函数名,和函数体拼接成字符串,传递给远程机器,然后就可以Invoke-Expression 在远程回话定义它了。