代码之家  ›  专栏  ›  技术社区  ›  dan-gph

从进程块调用函数

  •  2
  • dan-gph  · 技术社区  · 6 年前

    我想从我的PowerShell脚本中的进程块和结束块中调用一个特定的函数。下面是最小代码:

    # MyScript.ps1
    
    function MyFunc
    {
        "hello"
    }
    
    Begin 
    {
    }
    
    Process 
    {
        MyFunc
    }
    
    End 
    {
        MyFunc
    }
    

    但此代码不执行。我得到这个错误:

    begin:术语“begin”未被识别为Cmdlet的名称, 函数、脚本文件或可操作程序。

    2 回复  |  直到 6 年前
        1
  •  4
  •   mklement0    6 年前

    这个 begin / process / end (和) dynamic )块 只能使用 作为 只有 顶层结构 :

    • 在一个 脚本文件 ( *.ps1 )

    • 在一个 功能

    在这两种情况下,不允许使用其他顶级代码(除了 param(...) 参数声明块在顶部),一个约束 MyFunc 函数冲突。

    如果你想要你的剧本 要使用内部助手函数,请将其放置在 开始 -您可以从 过程 / 结束 根据需要阻塞:

    Begin {
      function MyFunc {
        "hello"
      }
    }
    
    Process {
      MyFunc
    }
    
    End {
      MyFunc
    }
    

    上述结果:

    hello
    hello
    

    也就是说,两个 过程 以及 结束 块已成功调用 米芬克 函数嵌套在 开始 块。

    一般来说,请注意 这个 开始 / 过程 / 结束 块共享相同的本地作用域 ,也适用于 变量 ,因此,类似地,可以在 开始 阻止并访问 过程 例如,块。
    通过相同的标记,嵌套函数-例如 米芬克 这里-是封闭脚本/函数的本地部分。

        2
  •  1
  •   Chase Florell    6 年前

    如果要在脚本中使用begin/process/end,则不能在顶层具有任何其他函数。相反,您将在 begin 块,其余的块也可以访问它。

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