5

パフォーマンスモニタ(Windows Server 2008 R2)でアラートを作成しましたが、\ Processor(_Total)\%Processor Timeが10を超えるアラート送信の条件が常に満たされていることを確認します)。イメージのアラートタスクのプロパティが表示されます。またPowerShellスクリプトを使用してパフォーマンスモニタから電子メールアラートを送信

enter image description here

、私はまた、ユーザーがログオンしているかどうかを実行します、そして、それは最高の権限で実行されますタスクスケジューラで新しいタスクを作成しました。このタスクのトリガーは、次のプロパティがあります。

  • は、タスクを開始します:基本
  • ログ:システム
  • 出典:プロセッサ

アクション(イベント

  • 設定にこれが正しいかわからない部分です)は、次の設定を備えています:

    • 処置:プログラムを開始する
    • プログラム/スクリプト:電子メールを送信するPowerShellスクリプトへのパス。

    PowerShellのコードを、次の($名、$日、$カウンタ、$しきい値、$値は、上記の画像のように、アラートのタスクのプロパティを設定するパフォーマンスモニタのデータコレクタから来ることになっている)である。

    function SendMail ($name, $date, $counter, $threshold, $value) { 
        $MailMessage = New-Object Net.Mail.MailMessage 
        $MailMessage.To.Add("[email protected]") 
        $MailMessage.From = "[email protected]" 
        $MailMessage.Subject = "ALERT - Performance Monitor" 
        $MailMessage.IsBodyHtml = $True 
    
        $MailMessage.Body = @" 
        <html><head></head><body> 
        The following counter needs attention:<BR><BR> 
        Name: $($name)<BR> 
        Date: $($date)<BR> 
        Counter: $($counter)<BR> 
        Threshold: $($threshold)<BR> 
        Actual Value: $($value)<BR> 
        <FONT face=Courier>$($html)</FONT> 
        <BR> 
        --- Automatically generated with SENDMAIL function --- 
        </body> 
        </html> 
    "@ 
    
        $SmtpClient = New-Object Net.Mail.SmtpClient("blah.bleh") 
        $SmtpClient.Send($MailMessage) 
    } 
    

    タスクが開始されると、履歴:タスク開始、アクション開始、および作成プロセスの確認が次のようになります。電子メールは決して送信されません。

    私はアクションを使用して電子メールを送信しようとしました:電子メールを送信し、正常に動作しました。誰が何が間違っているかも知っていますか?

  • +0

    すべてのパラメータがスクリプトで正しく渡されていますか。もう一つは、powershell v3を使用している場合、send-mailmessageコマンドレット-http://stackoverflow.com/a/17456077/581922 – Mitul

    +0

    を使用できます。@Mitul:パラメータ$ name、$ dateなどを意味しますか?もしそうなら、どうすれば確認できますか? email、smtp serverなどのパラメータを参照している場合は、私が使用しているアクションと同じものを使用しています。メールを送信してください(スクリプトでは、SMTPサーバーは「SMTP」で始まります。 (残念ながら、私はv3を使用していません:( – Anna

    +0

    あなたが投稿したコードは関数を定義していますが、その関数をどこでも呼び出すことはありません。 –

    答えて

    8

    基本的に2つのことを考えてください。

    1. スクリプトに正しく渡されるアラートパラメータを取得します。
    2. 実際には、スクリプトで定義されている関数を呼び出します。

    パラメータから始めます。 (上の写真)アラートのアラートタスク]タブで、[タスクの引数]フィールドを編集し、置き換える:

    {name}{date}{counter}{threshold}{value} 
    

    で:

    "{name}" "{date}" "{counter}" "{threshold}" "{value}" 
    

    あなたのパラメータは、基本的には、スペースで区切られた文字列値として解析されていますスペースを含む値を処理するために、個々のパラメータトークンの周りに二重引用符を追加し、各パラメータトークンの間にスペースを追加して、次のパラメータから1つのパラメータを伝えることができます。

    スケジュールされたタスク(「プロセッサの監視」という名前)の動作については、アラートのパラメータを期待し、それらのパラメータをPowerShellスクリプトに渡すように指示する必要があります。

    enter image description here

    あなたの行動は、すなわち "プログラムを起動" が正しいです。

    [プログラム/スクリプト]フィールドに「powershell.exe」と入力します(またはフルパスを参照します)。上記のようにperfmon_send_email.ps1があなたのSendMail()関数を含むスクリプトファイルです

    -File C:\path\to\your\PowerShell\scripts\perfmon_send_email.ps1 $(Arg0) 
    

    と引数フィールドを追加しますため、これを入力してください。

    このビットは一種のものだったので、これを設定する方法は他にもあるかもしれませんが、明示的に-Fileパラメータを使ってテストに違いがありました。 $(Arg0)の部分は、スケジュールされたタスクがPowerShellを実行してスクリプトを実行するときに、警告からのパラメータ文字列に置き換えられます。

    PowerShellスクリプトでアラートパラメータを使用できるようにする必要があります。これで、すでに定義した関数を実際に呼び出すだけです。 (関数定義の後に)あなたのスクリプトの末尾に以下を追加します。

    # Get parameter values by position and pass them to the SendMail() function. 
    SendMail $args[0] $args[1] $args[2] $args[3] $args[4] 
    

    $argsたちは、スケジュール設定され、正確に何であるコマンドラインから呼び出されたスクリプトファイルに渡されたパラメータ値を含む配列であり、タスクを行う。

    アラートは常に名前、日付、カウンタ、しきい値、値などの同じ順序で同じ値を送信することがわかっているので、位置に基づいたコマンドライン引数からアラートを取り出し、 SendMail()関数。

    コマンドライン引数を処理するにはmore robust waysがあることに注意してください。これはあなたの目的には十分であるはずです。

    +0

    Wow!詳細な説明!!本当にありがとうございます!しかし、私はスクリプトを実行すると、次のエラーメッセージが表示されているので、私はそれが動作するかどうかテストできません: "1"引数 " "($ SmtpCli行の場合ent.Send($ MailMessage))。これを引き起こしていると私はそれを修正する方法はありますか? – Anna

    +0

    心配しないで!問題は、私がsmtpクライアントを "SMTP.blah.bleh"に設定したことです。実際には "blah.bleh"にする必要があります:) – Anna

    +0

    最終的にメールを正しく送信するようにスクリプトを作成しました(YAY !!!) 。しかし、パラメータは電子メールで渡されていません。これは、電子メールの本文です: = 0D = 0AThe以下のカウンターは注意が必要です。

    == 0D = 0AName:$(ARG0)
    = 0D = 0ADate:
    = 0D = 0ACounter:
    = 0D = = 0D = 0A --- SENDMAIL関数で自動的に生成されました--- = 0D = 0D = 0A --- = 0D = 0A --- SENDMAIL関数で自動的に生成されました--- = 0Dhreshold ==
    = 0D = 0AActual値:
    = 0D = 0A = 0D = 0A = 0D = 0A
    == 0D = 0A = = 0D = 0A。カウンタは "%Processor Time"、しきい値は10で、実際の値は約50でなければなりません。 – Anna

    関連する問題