我想从我的PowerShell脚本的Process和End块中调用特定的函数。这是最小的代码:
# MyScript.ps1
function MyFunc
{
"hello"
}
Begin
{
}
Process
{
MyFunc
}
End
{
MyFunc
}
但是此代码不执行。我收到此错误:
开始:术语“开始”不被视为cmdlet的名称, 功能,脚本文件或可操作程序。
答案 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
}