5

मैंने प्रदर्शन मॉनिटर (विंडोज सर्वर 2008 आर 2) में एक चेतावनी बनाई है जिसे जब भी \ प्रोसेसर (_Total) \% प्रोसेसर समय 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

क्या आप सुनिश्चित हैं कि सभी पैरामीटर स्क्रिप्ट में सही तरीके से पारित हो रहे हैं। एक और बात यह है कि यदि आप पावरहेल v3 का उपयोग कर रहे हैं तो आप send-mailmessage cmdlet -http: //stackoverflow.com/a/17456077/581922 – Mitul

+0

@Mitul का उपयोग कर सकते हैं: क्या आपका मतलब पैरामीटर $ name, $ date, आदि है? यदि हां, तो मैं कैसे जांच सकता हूं? यदि आप ईमेल, smtp सर्वर, आदि जैसे पैरामीटर का जिक्र कर रहे हैं, तो मैं उसी क्रिया का उपयोग कर रहा हूं जैसा कि मैंने एक्शन में उपयोग किया था: एक ईमेल भेजें (इस अंतर के साथ, स्क्रिप्ट में, मेरा smtp सर्वर "SMTP" से शुरू होता है। (और दुर्भाग्य से, मैं v3 :( – Anna

+0

कोड तुम्हें तैनात एक समारोह को परिभाषित करता है उपयोग कर रहा हूँ, लेकिन मैं आप कहीं भी है कि कार्यप्रणाली को कॉल नहीं दिख रहा। –

उत्तर

8

मूल रूप से दो चीजें हैं जो इस काम को आपके लिए बनाना चाहिए।

  1. अपनी स्क्रिप्ट पर सही तरीके से पारित अलर्ट पैरामीटर प्राप्त करें।
  2. असल में अपनी स्क्रिप्ट में परिभाषित फ़ंक्शन को कॉल करें।

हम पैरामीटर के साथ शुरू करेंगे। आपकी सूचना के (ऊपर चित्र) की चेतावनी टास्क टैब पर, कार्य तर्क क्षेत्र को संपादित करें और बदलें:

साथ
{name}{date}{counter}{threshold}{value} 

:

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

आपका मापदंडों मूल रूप से एक अंतरिक्ष से अलग की गई स्ट्रिंग मान के रूप में पार्स किया जा रहा है , इसलिए हम रिक्त स्थान शामिल मानों को संभालने के लिए प्रत्येक व्यक्तिगत पैरामीटर टोकन के चारों ओर डबल-कोट्स जोड़ते हैं, और हम प्रत्येक व्यक्तिगत पैरामीटर टोकन के बीच एक स्थान जोड़ते हैं ताकि हम अगले से एक पैरामीटर बताने में सक्षम हो सकें।

फिर, आपके निर्धारित कार्य (नाम "प्रोसेसर मॉनीटरिंग") की कार्रवाई के लिए आपको इसे अलर्ट से पैरामीटर की उम्मीद करने और PowerShell स्क्रिप्ट में उन पैरामीटर को पास करने के लिए कहना होगा।

enter image description here

आपकी कार्यवाही की, अर्थात "एक कार्यक्रम शुरू करें" सही है।

कार्यक्रम/स्क्रिप्ट क्षेत्र, "PowerShell.exe" (या पूरा पथ के लिए ब्राउज़ करें) के लिए।

और तर्क जोड़ें क्षेत्र के लिए, इसे दर्ज करें:

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

कहाँ perfmon_send_email.ps1 स्क्रिप्ट के रूप में ऊपर वर्णित अपने SendMail() फंक्शन युक्त फ़ाइल है।

यह बिट बहुत ही जटिल था, इसलिए इसे स्थापित करने के अन्य तरीके हो सकते हैं, लेकिन स्पष्ट रूप से -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

वाह आप @Matt के लिए बहुत बहुत धन्यवाद विस्तृत स्पष्टीकरण !! मैं वास्तव में इसकी सराहना करता हूं! हालांकि, अगर यह काम करता है तो मैं परीक्षण नहीं कर सकता क्योंकि मेरी स्क्रिप्ट चलाने पर मुझे निम्न त्रुटि संदेश है: अपवाद "1" तर्क के साथ "भेजें" को कॉल करना: "मेल भेजने में विफलता "(लाइन $ SmtpCli के लिए ent.Send ($ MailMessage))। इसका कारण क्या है और मैं इसे कैसे ठीक करूं? – Anna

+0

कोई बात नहीं! समस्या यह थी कि मैंने अपने smtp क्लाइंट को "SMTP.blah.bleh" होने के लिए सेट किया है, जब इसे वास्तव में "blah.bleh" होना चाहिए :) – Anna

+0

तो आखिरकार मुझे स्क्रिप्ट को ईमेल भेजने के लिए ठीक मिला (हाँ !!!) । लेकिन पैरामीटर ईमेल में पास नहीं किए जा रहे हैं।तो इस ईमेल का मुख्य भाग है: = 0 D = 0AThe निम्नलिखित काउंटर की जरूरत है ध्यान:

== 0 D = 0AName: $ (Arg0)
= 0 D = 0ADate:
= 0 D = 0ACounter:
= 0 D = 0ATHreshold: =
= 0 डी = 0 वैक्चरुअल वैल्यू:
= 0 डी = 0 ए <फ़ॉन्ट चेहरा = 3 डी कोरियर> = 0 डी = 0 ए = 0 डी = 0 ए
== 0 डी = 0 ए --- स्वचालित रूप से SENDMAIL फ़ंक्शन के साथ जेनरेट --- --- 0 डी = 0 ए = = 0 डी = 0 ए। काउंटर "% प्रोसेसर टाइम" होना चाहिए, थ्रेसहोल्ड 10 होना चाहिए, और वास्तविक मूल्य लगभग 50 होना चाहिए। कोई विचार? – Anna

संबंधित मुद्दे