Powershell script not recognizing my function

此生再无相见时 提交于 2019-12-30 02:49:05

问题


I have a powershell script that parses a file and send an email if it detects a certain pattern. I have the email code setup inside a function, and it all works fine when I run it from the ISE, but I used PS2EXE to be able to run the script as a service but it does not recognize the function "email". my code looks similar to this

#Do things | 
foreach{
    email($_)
}

function email($text){
    #email $text
}

When I convert it to exe and run it I get this error:

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.

回答1:


Powershell processes in order (top-down) so the function definition needs to be before the function call:

function email($text){
    #email $text
}

#Do things | 
foreach{
    email($_)
}

It probably works fine in the ISE because you have the function definition in memory still from a prior run or test.




回答2:


When it comes to the Function-Calls, PowerShell is fairly different from other programming-languages in the following ways:

  1. When passing the arguments to a function, parentheses are NOT allowed (and will raise a parse error if Set-StrictMode is set to -version 2.0 or above/Latest), however, Parenthesised arguments must be used to call a method, which can either be a .NET method or a user defined method (defined within a Class - in PS 5.0 or above).
  2. Parameters are space-separated and not comma separated.
  3. Be careful in where you define the function. As PowerShell sequentially processes line-by-line in top-down order, hence the function must be defied before that function is called:

        Function func($para1){
              #do something
        }
        func "arg1"  #function-call
    

In ISE, function defined below the function-call may appear as working but (beware) it's the cached function definition in memory from a previous run, so if you have updated the function you are screwed.



来源:https://stackoverflow.com/questions/17347564/powershell-script-not-recognizing-my-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!