Передать функцию (с аргументами) в качестве параметра в 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 ответов
существует гораздо более чистый способ сделать это с помощью поставщика функций PowerShell. Мне нужно было иметь возможность запускать функции из других исходных файлов с переменным числом аргументов на основе XML-файла, предоставленного во время выполнения.
при разработке этого я написал небольшой тестер "Hello World" в двух исходных файлах, который должен быть довольно понятным (волшебная строка"$x = (&$func $parm)"):
- "Привет.пс1" - пульт функция
function Hello ($in) {
write-Host "Hello $in"
}
- " 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}