Передать функцию (с аргументами) в качестве параметра в PowerShell

я успешно передаю функции без аргументов в PowerShell с помощью ScriptBlocks. Однако я не могу заставить это работать, если функция имеет аргументы. Есть ли способ сделать это в PowerShell? (П2 желательно)

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

затем

Apply { Add } 

записывает 0 в консоль. Распространяется ли вызвать Add, но не передает никаких аргументов (т. е. использует значения по умолчанию [int] 0 и 0)

3 ответов


Ок, я нашел ответ!--4-->здесь:

Я хочу ${function:Add}, а не { Add } в вызове Apply.


существует гораздо более чистый способ сделать это с помощью поставщика функций PowerShell. Мне нужно было иметь возможность запускать функции из других исходных файлов с переменным числом аргументов на основе XML-файла, предоставленного во время выполнения.

при разработке этого я написал небольшой тестер "Hello World" в двух исходных файлах, который должен быть довольно понятным (волшебная строка"$x = (&$func $parm)"):

  1. "Привет.пс1" - пульт функция

    function Hello ($in) {
     
        write-Host "Hello $in"
    }
  1. " Hello2.ps1 " - исполняющая процедура

    function exec-script ($file, $func, $parm) {
       
       Invoke-Expression $file    
       
       $x = (& $func $parm)
       
       $x
        
       }
    
    exec-script -file ".\Hello" -func "Hello" -parm "World"

- вы не хотите сделать что-то подобное?

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

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

Apply { Add 1 2}