从流程块中调用函数

时间:2018-07-30 02:59:03

标签: powershell

我想从我的PowerShell脚本的Process和End块中调用特定的函数。这是最小的代码:

# MyScript.ps1

function MyFunc
{
    "hello"
}

Begin 
{
}

Process 
{
    MyFunc
}

End 
{
    MyFunc
}

但是此代码不执行。我收到此错误:

  

开始:术语“开始”不被视为cmdlet的名称,   功能,脚本文件或可操作程序。

2 个答案:

答案 0 :(得分:4)

begin / process / end(和dynamic)块只能与一起使用。 顶级构造:

    脚本文件中的
  • *.ps1

  • 函数中

在两种情况下,都不允许使用其他顶级代码(除了顶部的param(...)参数声明块之外),这是脚本内部MyFunc函数的位置违反的约束

如果您希望脚本使用内部帮助器功能,请将其放在begin块内-您可以从process / { {1}}根据需要进行阻止:

end

以上结果:

Begin {
  function MyFunc {
    "hello"
  }
}

Process {
  MyFunc
}

End {
  MyFunc
}

也就是说,hello hello process块都成功调用了嵌套在end块内的MyFunc函数。

通常,请注意, begin / begin / process块具有相同的局部范围,这也适用于变量,因此,类似地,例如,您可以在end块中初始化脚本/局部函数变量,然后在begin块中访问它。
同样,嵌套函数(如process在此处)对于封闭的脚本/函数而言是本地的。

答案 1 :(得分:1)

如果要在脚本中使用开始/处理/结束,则顶层不能具有任何其他功能。取而代之的是,您将在begin块中定义内部函数,其余的块也将对其进行访问。

begin 
{
    function MyFunc
    {
        Write-Host "Hello"
    }

    MyFunc
}

process {
    MyFunc
}

end {
    MyFunc
}