C:\ TMP \ run.ps1:
function buildOne()
{
param(
[Parameter(Mandatory=$true)][string]$a,
[Parameter(Mandatory=$true)][string]$b
)
Write-Host -ForegroundColor yellow "$a $b"
}
C:\tmp\_build.ps1 {$Function:buildOne}
C:\ tmp_build.ps1:
param(
[Parameter(Mandatory=$true)]$buildOne
)
#&$buildOne "a" "b"
#Invoke-Command $buildOne -argumentlist "a", "b"
#Invoke-Command -ScriptBlock $buildOne -argumentlist "a", "b"
我们的想法是调用从buildOne
到run.ps1
作为参数传递的_build.ps1
函数。不幸的是,我的尝试都没有奏效。出于某种原因,它只显示函数体而不是调用它。
我做错了什么?
答案 0 :(得分:2)
您可以按名称调用命令(和函数),只要它们在范围内:
C:\tmp_build.ps1 buildOne
tmp_build.ps1
& $buildOne a b
如果你真的想传递函数定义,那就这样做:
run.ps1
function buildOne()
{
param(
[Parameter(Mandatory=$true)][string]$a,
[Parameter(Mandatory=$true)][string]$b
)
Write-Host -ForegroundColor yellow "$a $b"
}
.\tmp_build.ps1 $Function:buildOne
tmp_build.ps1
param(
[Parameter(Mandatory=$true)]$buildOne
)
$buildOne.Invoke("a", "b")