2013-06-27 7 views
12

ファイルを解析して特定のパターンを検出した場合に電子メールを送信するpowershellスクリプトがあります。私は関数内に電子メールコードを設定していますが、ISEから実行するとうまく動作しますが、PS2EXEを使用してスクリプトをサービスとして実行できますが、関数 "email"は認識されません。私のコードは、このPowershellスクリプトが自分の関数を認識しない

#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. 

答えて

22

PowerShellのプロセス(トップダウン)ので、関数定義があることが必要

メモリ内の関数定義が以前の実行またはテストのままであるため、おそらくISEで正常に動作します。

+0

ありがとうございます! – laitha0

0

それは、呼び出しを機能するようになると、PowerShellは次の方法で、他のプログラミング言語とはかなり異なっている:

  1. 関数に引数を渡すときには、括弧が許可(とでパースエラーを発生させますされませんただし、Set-StrictModeが-version 2.0以上/ Latestに設定されている場合は、括弧で囲まれた引数を使用してメソッドを呼び出す必要があります。このメソッドは、.NETメソッドまたはユーザー定義メソッド(Class-in PS 5.0以上)。
  2. パラメータはスペースで区切られ、コンマで区切られていません。
  3. 関数を定義する場所に注意してください。 PowerShellの順次従って関数は前関数が呼び出される反抗しなければならず、トップダウンのために、ライン・バイ・ラインを処理するように:ISEで

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

、関数関数呼び出し以下に定義してもよいです動作しているように見えますが、それは以前の実行時のメモリ内のキャッシュされた関数の定義なので、関数を更新してしまった場合は、

関連する問題