如何将函数放入希望能够直接调用的Powershell脚本文件中?

如何将函数放入希望能够直接调用的Powershell脚本文件中?,powershell,Powershell,如果我有一个powershell脚本文件,我希望能够直接调用它,名为Find MyThing,那么我如何向其中添加一个函数以供使用 基本上,我想写一个这样的文件: Param( [Parameter(ValueFromPipeline=$true)] $ThingReference) process{ $intermediateValue = DoSomeProcessing($ThingReference) $finalValue = DoSomeMoreProce

如果我有一个powershell脚本文件,我希望能够直接调用它,名为Find MyThing,那么我如何向其中添加一个函数以供使用

基本上,我想写一个这样的文件:

Param(
[Parameter(ValueFromPipeline=$true)]
  $ThingReference)

process{
     $intermediateValue =  DoSomeProcessing($ThingReference)
     $finalValue = DoSomeMoreProcessing($intermediateValue)
     return $finalValue
}

Function DoSomeProcessing($thing){...}

Function DoSomeMoreProcessing($thing){...}
但是Powershell不喜欢我在文件中有单独的函数。我可以将主处理封装在一个函数中,但是实际上无法从文件外部调用它

这可能吗?还是我应该以完全不同的方式处理问题?

找到了

我可以把函数放在begin块中,这就定义了它们供以后使用

Param(
  [Parameter(ValueFromPipeline=$true)]
  $ThingReference)

begin{
Function DoSomeProcessing($thing){...}

Function DoSomeMoreProcessing($thing){...}
}


process{
     $intermediateValue =  DoSomeProcessing($ThingReference)
     $finalValue = DoSomeMoreProcessing($intermediateValue)
     return $finalValue
}
找到了

我可以把函数放在begin块中,这就定义了它们供以后使用

Param(
  [Parameter(ValueFromPipeline=$true)]
  $ThingReference)

begin{
Function DoSomeProcessing($thing){...}

Function DoSomeMoreProcessing($thing){...}
}


process{
     $intermediateValue =  DoSomeProcessing($ThingReference)
     $finalValue = DoSomeMoreProcessing($intermediateValue)
     return $finalValue
}

他们不必在开始区。在您实际尝试调用它们之前,它们必须位于文件中的任何位置。如果我将函数放在begin块之外,则它将不会运行-这会给我一个错误:Get Process:无法计算参数“Name”,因为它的参数被指定为脚本块,并且没有输入。脚本块在没有输入的情况下无法计算。@EBGreen是错误的:如果要使用进程块(并且必须使用声明为binding
ValueFromPipeline
的变量),则定义必须位于
begin
块中。顺便说一句:这是你问题的答案,所以你应该把它标记为一。我写了一篇关于你刚才犯的错误的博文()谢谢Bartek-这是一篇好文章。我会尽快接受我的回答(显然必须是两天),他们不必在开始阶段。在您实际尝试调用它们之前,它们必须位于文件中的任何位置。如果我将函数放在begin块之外,则它将不会运行-这会给我一个错误:Get Process:无法计算参数“Name”,因为它的参数被指定为脚本块,并且没有输入。脚本块在没有输入的情况下无法计算。@EBGreen是错误的:如果要使用进程块(并且必须使用声明为binding
ValueFromPipeline
的变量),则定义必须位于
begin
块中。顺便说一句:这是你问题的答案,所以你应该把它标记为一。我写了一篇关于你刚才犯的错误的博文()谢谢Bartek-这是一篇好文章。我会尽快接受我的回答(显然必须是两天。)