将函数(带参数)作为参数传递给PowerShell

时间:2013-09-02 09:13:26

标签: powershell functional-programming powershell-v2.0 first-class-functions

我已经使用ScriptBlocks在PowerShell中成功传递了无参数函数。但是,如果函数有参数,我无法使用它。有没有办法在PowerShell中执行此操作? (最好是v2)

Function Add([int] $x, [int] $y)  
{ 
  return $x + $y 
}
Function Apply([scriptblock] $s)    
{ 
    write-host ($s.Invoke(1,2)) 
}

然后

Apply { Add } 

将0写入控制台。 Apply会调用Add,但不传递任何参数(即使用0和0的默认[int]值)

3 个答案:

答案 0 :(得分:13)

好的,我找到了答案here

我在调用${function:Add}时想要{ Add }而不是Apply

答案 1 :(得分:1)

使用PowerShell函数提供程序可以更清晰地执行此操作。我需要能够根据运行时提供的XML文件从其他源文件中运行具有可变数量参数的函数。

在开发这个时,我在两个源文件中写了一个小的“Hello World”测试器,这应该是相当不言自明的(魔术行是“ $ x =(& $ func $ parm) “):

  1. “Hello.ps1” - 远程功能
  2.     function Hello ($in) {
         
            write-Host "Hello $in"
        }

    1. “Hello2.ps1” - 执行例程
    2.     function exec-script ($file, $func, $parm) {
             
             Invoke-Expression $file    
             
             $x = (& $func $parm)
             
             $x
              
             }
          
          exec-script -file ".\Hello" -func "Hello" -parm "World"

答案 2 :(得分:0)

你不想做这样的事吗?

function Add([int] $x, [int] $y)  
{ 
    return $x + $y 
}

function Apply([scriptblock] $s)    
{ 
    Write-Host $s.Invoke($args)
}

Apply { Add 1 2}