我有一个powershell脚本,它解析文件并在检测到某种模式时发送电子邮件。我在一个函数中设置了电子邮件代码,当我从ISE运行它时一切正常,但我使用 PS2EXE 来运行脚本作为服务,但它无法识别功能“电子邮件”。我的代码看起来与此类似
#Do things |
foreach{
email($_)
}
function email($text){
#email $text
}
当我将其转换为exe并运行它时,我收到此错误:
The term 'email' is not recognized as teh name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included,
verify that the path is correct and try again.
答案 0 :(得分:31)
Powershell按顺序进行处理(自上而下),因此函数定义需要在函数调用之前:
function email($text){
#email $text
}
#Do things |
foreach{
email($_)
}
它可能在ISE中运行正常,因为你在内存中的函数定义仍然来自先前的运行或测试。
答案 1 :(得分:2)
对于函数调用,PowerShell在以下方面与其他编程语言完全不同:
在定义功能的地方要小心。由于PowerShell按照自上而下的顺序逐行进行处理,因此必须在调用函数之前 >> >>
Function func($para1){
#do something
}
func "arg1" #function-call
在ISE中,函数调用下面定义的函数可能看起来有效,但(请注意)它是上一次运行时内存中的缓存函数定义,所以如果你更新了函数,那么你就搞砸了。