ファイルを解析して特定のパターンを検出した場合にメールを送信する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.
Powershellは順番に(トップダウンで)処理するため、関数定義は関数呼び出しの前にある必要があります。
function email($text){
#email $text
}
#Do things |
foreach{
email($_)
}
以前の実行またはテストからの関数定義がメモリに残っているため、おそらくISEで正常に機能します。
関数呼び出しに関しては、PowerShellは他のプログラミング言語と次の点でかなり異なります。
関数を定義する場所には注意してください。 PowerShellは1行ずつ上から下へと順番に処理するため、関数を定義する必要がありますbeforeその関数が呼び出されます。
Function func($para1){
#do something
}
func "arg1" #function-call
ISEでは、関数呼び出しの下で定義された関数が機能しているように見えるかもしれませんが、(注意)以前の実行からメモリにキャッシュされた関数定義であるため、関数を更新した場合、ねじ込みます。