我正在尝试使用可执行代码和函数的脚本,如下所示:
function CopyFiles {
Param( ... )
...
}
// Parameter for the script
param ( ... )
// Executable code
但是,我遇到以下错误:“赋值表达式无效。赋值运算符的输入必须是能够接受赋值的对象,例如变量或属性”
当我在文件末尾列出我的函数时,它表示函数名是未定义的。如何在同一脚本中从可执行代码调用powershell函数?
答案 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静态方法,以便在之后转换值,并检查它的评估结果。