powershell参数需要位于脚本的前面吗?

时间:2014-09-19 18:20:47

标签: function powershell

我正在尝试使用可执行代码和函数的脚本,如下所示:

function CopyFiles {
 Param( ... )
...
}

// Parameter for the script
param ( ... ) 

// Executable code

但是,我遇到以下错误:“赋值表达式无效。赋值运算符的输入必须是能够接受赋值的对象,例如变量或属性”

当我在文件末尾列出我的函数时,它表示函数名是未定义的。如何在同一脚本中从可执行代码调用powershell函数?

2 个答案:

答案 0 :(得分:8)

正确的顺序是:

1.Script参数

# Parameter for the script
param([string]$foo) 

2.Function definitons

function CopyFiles {
    Param([string]$bar)
    ...
}

3.Script code

# Executable code
CopyFiles $foo $bar

为什么你会想要任何其他方式?

答案 1 :(得分:1)

参数总是先行。我在一个时间点有一个类似的问题,为脚本提供参数输入。你的脚本应该去:

param ( . . . )
# functions
# script body

出于某种原因,PowerShell解析引擎并不理解param关键字不在脚本的第一行,不包括注释行。你也可以这样做:

param (
# params must be at the top of the file
)

您还可以使用Get-Variable检查您的参数是否已声明,或者是否具有所需的输入。另一件事;如果你想将数据转换为某种类型,比如System.Boolean,我会在param块和BEFORE函数之后执行。如果在参数声明中对System.Boolean进行类型转换,那么如果运行脚本的人不以布尔值提交输入参数,那么你会遇到错误,这比使用它更难。 NET System.Convert静态方法,以便在之后转换值,并检查它的评估结果。