Date: พฤศจิกายน 18, 2018
ป้ายกำกับ:Windows Server 2016, การแจ้งเตือนทางอีเมลเมื่อบริการ Windows เฉพาะเริ่มหรือหยุด
ทีละขั้นตอน: วิธีการเรียกใช้การแจ้งเตือนทางอีเมลเมื่อบริการ Windows เฉพาะเริ่มหรือหยุดบน Windows Server 2016
แตกต่างจากโพสต์ก่อนหน้าของฉันที่ฉันแสดงให้คุณทราบว่าจะส่งการแจ้งเตือนทางอีเมลตาม EventIDs Windows บางอย่างที่ถูกบันทึกไว้ในบันทึกเหตุการณ์ของ Windows คราวนี้ฉันจะแบ่งปันวิธีการเรียกใช้การแจ้งเตือนทางอีเมลเมื่อบริการ Windows เฉพาะเริ่มหรือหยุด ใช้งานได้ดีสำหรับกิจกรรมส่วนใหญ่ แม้ว่าจะทราบว่าไม่เหมาะถ้าคุณต้องการได้รับการแจ้งเตือนเมื่อบริการ Windows เริ่มต้นหรือหยุดทำงาน เมื่อบริการ Windows เริ่มหรือหยุดทำงาน EventID 7036 จาก "Service Control Manager" ที่มีการบันทึกไว้ในบันทึกของระบบ Windows ตอนนี้เราสามารถตั้งค่าให้ทริกเกอร์ส่งอีเมลเมื่อใดก็ตามที่ EventID ถูกบันทึกไว้ตามที่อธิบายไว้ในบทความก่อนหน้านี้ อย่างไรก็ตามคุณอาจไม่ต้องการรับอีเมลเมื่อทุกบริการของ Windows เริ่มหรือหยุดทำงาน เพื่อให้ละเอียดขึ้นเล็กน้อยเราจะต้องแก้ไขข้อมูล XML ที่เชื่อมโยงกับ Windows Event Filter เมื่อเราตั้งค่าทริกเกอร์ นี่คือการมองลึกมากขึ้นที่ Event Properties และกรองข้อมูล EventData ที่แสดงเฉพาะเมื่อคุณดูมุมมอง XML ในแท็บ Details ของ Windows Event งานนี้ได้รับการยืนยันใน Windows Server 2016 แต่ฉันสงสัยว่าควรทำงานบน Windows Server 2012 R2 และ Windows Server 2019 ด้วย ถ้าคุณได้รับมันทำงานบนแพลตฟอร์มอื่นใดโปรดแสดงความคิดเห็นและแจ้งให้เราทราบหากคุณมีการเปลี่ยนแปลงอะไร
ขั้นตอนที่ 1 – เขียนสคริปต์ Powershell
สิ่งแรกที่คุณต้องทำก็คือเขียนสคริปต์ Powershell ซึ่งเมื่อรันสามารถส่งอีเมลได้ คุณจำเป็นต้องมีอีเมลดังกล่าวเพื่อเรียกใช้การแจ้งเตือนทางอีเมลเมื่อบริการ Windows เฉพาะเริ่มหรือหยุด มีหลายวิธีที่จะทำให้งานนี้สำเร็จ ฉันจะแสดงให้คุณเห็นเป็นเพียงวิธีหนึ่ง แต่คุณสามารถทดลองและใช้สิ่งที่เหมาะสมกับสภาพแวดล้อมของคุณได้ ในห้องทดลองของฉันฉันไม่ได้ใช้เซิร์ฟเวอร์ SMTP ของตนเองดังนั้นฉันจึงต้องเขียนสคริปต์ที่สามารถใช้ประโยชน์จากบัญชี Gmail ของฉันได้ คุณจะเห็นในสคริปต์ Powershell ของฉันรหัสผ่านไปยังบัญชีอีเมลที่ตรวจสอบสิทธิ์กับเซิร์ฟเวอร์ SMTP อยู่ในรูปแบบข้อความธรรมดา หากคุณกังวลว่าอาจมีบุคคลอื่นเข้าถึงสคริปต์ของคุณและค้นพบรหัสผ่านของคุณคุณจะต้องการเข้ารหัสข้อมูลรับรองของคุณ Gmail ต้องใช้และการเชื่อมต่อ SSL เพื่อให้รหัสผ่านของคุณปลอดภัยบนสายเช่นเดียวกับโปรแกรมรับส่งอีเมลอื่น ๆ นี่คือตัวอย่างของสคริปต์ Powershell ที่ใช้ร่วมกับ Task Scheduler ซึ่งจะส่งการแจ้งเตือนทางอีเมลโดยอัตโนมัติเมื่อมีการบันทึกเหตุการณ์ใด ๆ ไว้ใน Windows Event Log ในสภาพแวดล้อมของฉันฉันบันทึกสคริปต์นี้ไว้ที่ C: Alerts ServiceAlert.ps1
$ System = "* [System [EventID = 7036] และ EventData [Data = 'SIOS DataKeeper']] $ A = Get-WinEvent -LogName System -MaxEvents 1 -FilterXPath $ filter $ Message = $ A.Message $ EventID = $ A.Id $ MachineName = $ A.MachineName $ แหล่งที่มา = $ A.ProviderName $ EmailFrom = "sios@medfordband.com" $ EmailTo = "sios@medfordband.com" $ Subject = "การแจ้งเตือนจาก $ MachineName" $ Body = "EventID: $ EventID`nSource: $ แหล่งที่มา` nMachineName: $ MachineName`n $ ข้อความ " $ SMTPServer = "smtp.gmail.com" $ SMTPClient = New-Object Net.Mail.SmtpClient ($ SmtpServer, 587) $ SMTPClient.EnableSsl = $ true $ SMTPClient.Credentials = New-Object System.Net.NetworkCredential ("sios@medfordband.com" "MySMTPP @ 55w0rd"); $ SMTPClient.Send ($ EmailFrom, $ EmailTo, $ หัวเรื่อง, $ Body)
ตัวอย่างอีเมลที่สร้างขึ้นจากสคริปต์ Powershell นั้นมีลักษณะดังนี้ คุณอาจสังเกตเห็นว่าสคริปต์ Powershell นี้ใช้ cmdlet Get-WinEvent เพื่อคว้ารายการบันทึกเหตุการณ์ล่าสุดจาก LogName, EventID และ EventDataspecified จากนั้นจะแยกวิเคราะห์เหตุการณ์นั้นและกำหนด EventID, Source, MachineName และ Message ให้กับตัวแปรที่จะใช้ในการเขียนอีเมล คุณจะเห็นว่า LogName, EventID และ EventData ที่ระบุจะเหมือนกับสิ่งที่คุณจะระบุเมื่อคุณตั้งค่า Scheduled Task ในขั้นตอนที่ 2 ในขณะที่ EventID LogName อาจคุ้นเคยกับคุณ EventData อาจไม่คุ้นเคย หากต้องการดู EventData ที่เชื่อมโยงกับเหตุการณ์ใดเหตุการณ์หนึ่งคุณจะต้องเปิด Event ใน Event Viewer ดูที่แท็บ Details แล้วเลือกมุมมอง XML จากมุมมอง XML คุณจะเห็นข้อมูลทั้งหมดที่มาพร้อมกับกิจกรรม ที่ด้านล่างของ XML คุณจะเห็นอาร์เรย์ของข้อมูลที่เรียกว่า <EventData> ภายในนั้นคุณจะพบข้อมูลกิจกรรมเพิ่มเติมที่จัดเก็บเป็นพารามิเตอร์ ตามที่แสดงด้านล่างใน "param1" เราจะพบชื่อของบริการว่าหยุดหรือเริ่มต้น
ขั้นตอนที่ 2 – ตั้งค่างานกำหนดการ
ใน Task Scheduler สร้างงานตามที่แสดงในภาพหน้าจอต่อไปนี้
- สร้างงานตรวจสอบว่างานถูกตั้งค่าเป็นเรียกใช้ว่าผู้ใช้ล็อกอินหรือไม่
- ในแท็บทริกเกอร์เลือกสร้างใหม่เพื่อสร้าง Trigger ซึ่งจะเริ่มงาน "On a Event" ในตัวอย่างของฉันฉันจะสร้างเหตุการณ์ที่เรียกใช้เวลาใด ๆ DataKeeper (extmirr) บันทึกเหตุการณ์สำคัญลงในบันทึกของระบบ สร้างเหตุการณ์ที่กำหนดเองและตัวกรองกิจกรรมใหม่ดังที่แสดงด้านล่าง … สำหรับทริกเกอร์ของฉันคุณสามารถเริ่มต้นการตั้งค่าทริกเกอร์ที่จะตรวจสอบ 7036 ตามที่ได้อธิบายไว้ในบทความก่อนหน้านี้ อย่างไรก็ตามอินเทอร์เฟซ GUI ตัวกรองไม่อนุญาตให้เราระบุชื่อบริการที่เก็บไว้ใน Param1 ของ EventData ตามที่ได้อธิบายไว้ก่อนหน้านี้ ในการตรวจสอบเฉพาะบริการที่เราสนใจเราจะต้องแก้ไข XML โดยตรงดังที่แสดงไว้ด้านล่าง ถ้าคุณต้องการข้ามตรงไปที่การไล่ล่าคุณสามารถคัดลอก XML ของฉันด้านล่างและแทนที่ 'SIOS DataKeeper' ด้วยข้อมูลเหตุการณ์ที่จัดเก็บไว้ใน param1 ของกิจกรรมที่คุณต้องการตรวจสอบ
<QueryList> <Query Id = "0" Path = "ระบบ"> <เลือกเส้นทาง = "ระบบ"> * [ระบบ [(ระดับ = 4 หรือระดับ = 0) และ (EventID = 7036)]] และ * [EventData [Data [1] = 'SIOS DataKeeper']] </ Select> </ แบบสอบถาม> </ QueryList>
- เมื่อมีการกำหนดค่าทริกเกอร์เหตุการณ์คุณจะต้องกำหนดค่าแอ็คชันที่เกิดขึ้นเมื่อมีการเรียกใช้งานเหตุการณ์ ในกรณีของเราเราจะเรียกใช้สคริปต์ Powershell ที่เราสร้างขึ้นในขั้นตอนที่ 1
- พารามิเตอร์สภาวะดีฟอลต์ควรมีค่าเพียงพอ
- และสุดท้ายบนแท็บการตั้งค่าให้แน่ใจว่าคุณอนุญาตให้งานสามารถเรียกใช้ตามต้องการและ "คิวใหม่อินสแตนซ์" ถ้างานกำลังทำงานอยู่
ขั้นตอนที่ 3 (ถ้าจำเป็น) – แก้ไข Microsoft -Windows – Distributedcom รหัสเหตุการณ์: 10016 ข้อผิดพลาด
ในทางทฤษฎีถ้าคุณทำทุกอย่างถูกต้องตอนนี้คุณควรเริ่มต้นรับอีเมลทุกครั้งที่เหตุการณ์ที่คุณกำลังตรวจสอบได้รับการบันทึกไว้ในแฟ้มบันทึกเหตุการณ์ อย่างไรก็ตามฉันวิ่งเข้าไปในปัญหาสิทธิ์ที่แปลก ๆ บนเซิร์ฟเวอร์ของฉันซึ่งฉันต้องระบุก่อนทำงานทุกอย่าง ฉันไม่แน่ใจว่าคุณจะพบปัญหานี้หรือไม่ แต่ในกรณีนี้จะมีการแก้ไข ในกรณีของฉันเมื่อฉันเรียกใช้เหตุการณ์ด้วยตนเองหรือถ้าฉันเรียกใช้สคริปต์ Powershell โดยตรงทุกอย่างทำงานตามที่คาดไว้และฉันได้รับอีเมล แต่ถ้าหนึ่ง EventIDs ถูกตรวจสอบเข้าสู่บันทึกเหตุการณ์จะไม่ส่งผลให้มีการส่งอีเมล เงื่อนงำเดียวที่ฉันมีคือรหัสเหตุการณ์: 10016 ที่ถูกบันทึกไว้ในบันทึกเหตุการณ์ระบบของฉันทุกครั้งที่ฉันคาดว่า Task Trigger จะตรวจพบเหตุการณ์ที่บันทึกไว้
ชื่อการเข้าสู่ระบบ: ระบบ แหล่งที่มา: Microsoft-Windows-DistributedCOM วันที่: 10/27/2018 5:59:47 PM รหัสเหตุการณ์: 10016 ประเภทงาน: ไม่มี ระดับ: ข้อผิดพลาด คำสำคัญ: คลาสสิก ผู้ใช้: DATAKEEPER dave คอมพิวเตอร์: sql1.datakeeper.local รายละเอียด: การตั้งค่าสิทธิ์เฉพาะแอปพลิเคชันไม่ได้ให้สิทธิ์การเปิดใช้งาน Local Activation สำหรับแอ็พพลิเคชันเซิร์ฟเวอร์ COM ที่มี CLSID {D63B10C5-BB46-4990-A94F-E40B9D520160} และ APPID {9CA88EE3-ACB7-47C8-AFC4-AB702511C276} ให้กับผู้ใช้ DATAKEEPER dave SID (S-1-5-21-25339xxxxx-208xxx580-6xxx06984-500) จาก ที่อยู่ LocalHost (ใช้ LRPC) ทำงานในคอนเทนเนอร์ของแอ็พพลิเคชัน SID (Unavailable) สิทธิ์การรักษาความปลอดภัยนี้สามารถแก้ไขได้โดยใช้เครื่องมือการจัดการบริการคอมโพเนนต์
ผลการค้นหา Google จำนวนมากสำหรับข้อผิดพลาดดังกล่าวบ่งชี้ว่าข้อผิดพลาดไม่เป็นพิษเป็นภัยและรวมถึงคำแนะนำในการปราบปรามข้อผิดพลาดแทนที่จะแก้ไข อย่างไรก็ตามผมค่อนข้างแน่ใจว่าข้อผิดพลาดนี้เป็นสาเหตุของความล้มเหลวในปัจจุบันของฉันที่จะสามารถส่งการแจ้งเตือนทางอีเมลจากเหตุการณ์ที่กำหนดไว้ซึ่งถูกเรียกใช้จากรายการบันทึกเหตุการณ์ที่ตรวจสอบ ฉันต้องการแก้ไข หลังจากการค้นหามากฉันสะดุดเมื่ออภิปรายกลุ่มข่าวนี้ คำตอบจาก Marc Whittlesey ชี้ไปในทิศทางที่ถูกต้อง นี่คือสิ่งที่เขาเขียน …
มีคีย์รีจิสทรี 2 ชุดที่คุณต้องตั้งค่าสิทธิ์ก่อนที่คุณจะไปที่การกำหนดค่า DCOM ในบริการคอมโพเนนต์: คีย์ CLSID และปุ่ม APPID
ผมขอแนะนำให้ทำตามขั้นตอนต่างๆเพื่อแก้ไขปัญหา:
1 กดปุ่ม Windows + R และพิมพ์ regedit แล้วกด Enter 2 ไปที่ HKEY_Classes_Root CLSID * CLSID * 3 คลิกขวาที่ไฟล์แล้วเลือกสิทธิ์ 4 คลิกล่วงหน้าและเปลี่ยนเจ้าของเป็นผู้ดูแลระบบ คลิกกล่องที่จะปรากฏใต้บรรทัดเจ้าของ 5 ใช้การควบคุมแบบเต็มรูปแบบ 6 ปิดแท็บจากนั้นไปที่ APPID * HKEY_LocalMachine Software Classes AppID * 7 คลิกขวาที่ไฟล์แล้วเลือกสิทธิ์ 8 คลิกล่วงหน้าและเปลี่ยนเจ้าของให้ผู้ดูแลระบบ 9 คลิกช่องที่จะปรากฏใต้บรรทัดเจ้าของ 10 คลิกใช้และให้สิทธิ์การควบคุมแบบเต็มรูปแบบแก่ผู้ดูแลระบบ 11 ปิดแท็บทั้งหมดและไปที่เครื่องมือการดูแลระบบ 12 เปิดบริการส่วนประกอบ 13 คลิกคอมพิวเตอร์คลิกคอมพิวเตอร์ของฉันแล้วคลิก DCOM 14 ค้นหาบริการที่เกี่ยวข้องซึ่งปรากฏในโปรแกรมดูข้อผิดพลาด 15 คลิกขวาที่คุณสมบัติแล้วคลิกคุณสมบัติ 16 คลิกแท็บความปลอดภัยแล้วคลิก Add User, Add System จากนั้นใช้ 17 ทำเครื่องหมายที่ช่อง Enable local ดังนั้นใช้คีย์ที่เกี่ยวข้องที่นี่และ DCOM Config จะทำให้คุณสามารถเข้าถึงพื้นที่ที่เป็นสีเทาได้: CLSID {DATBLE {9CA88EE3-ACB7-47C8-AFC4-AB702511C276} {D63B10C5-BB46-4990-A94F-E40B9D520160}
ฉันสามารถทำตามขั้นตอน 1-15 คำทุกคำสวย ๆ อย่างไรก็ตามเมื่อฉันไปถึงขั้นตอนที่ 16 ฉันไม่สามารถบอกได้อย่างแท้จริงว่าเขาต้องการให้ฉันทำอะไร ตอนแรกฉันได้รับ DATAKEEPER dave บัญชีผู้ใช้ Full Control ไปยัง RuntimeBroker แต่สิ่งนั้นไม่สามารถแก้ไขได้ สุดท้ายฉันเลือก "ใช้ค่าเริ่มต้น" กับทั้งสามสิทธิ์และแก้ไขปัญหา ฉันไม่แน่ใจว่าเหตุใดจึงเกิดขึ้น แต่ฉันคิดว่าฉันควรจะเขียนบทความทั้งหมดลงไปในกรณีที่เกิดขึ้นอีกเพราะต้องใช้เวลาสักครู่เพื่อให้เข้าใจ
ขั้นตอนที่ 4 – อัตโนมัติการปรับใช้
ถ้าคุณต้องการเปิดใช้งานการแจ้งเตือนเดียวกันในหลายระบบคุณสามารถส่งออกงานของคุณไปยังไฟล์ XML และนำเข้าในระบบอื่น ๆ ได้ ส่งออก [/ caption] นำเข้า [/ caption] หรือดียิ่งกว่านี้ , อัตโนมัตินำเข้าเป็นส่วนหนึ่งของกระบวนการสร้างของคุณผ่านสคริปต์ Powershell หลังจากทำไฟล์ XML ของคุณพร้อมใช้งานบนไฟล์ร่วมดังแสดงในตัวอย่างต่อไปนี้
PS C: > ลงทะเบียน ScheduledTask-Xml (get-content '\ myfileshare tasks DataKeeperAlerts.xml' | out-string) -TaskName "DataKeeper Service Alerts" - ผู้ใช้ datakeeper dave -Password MyDomainP @ 55W0rd -Force
สุดท้ายการแจ้งเตือนทางอีเมลเมื่อบริการ Windows เฉพาะเริ่มหรือหยุด
หวังว่าสิ่งที่ฉันได้ให้ไว้จะให้ทุกอย่างที่คุณต้องการเพื่อเริ่มรับอีเมลแจ้งเตือนเมื่อใดก็ตามที่ Windows Services ให้คุณได้ในเวลากลางคืน สรุปชุดนี้เกี่ยวกับการกำหนดค่าการแจ้งเตือนทางอีเมล ในชุดข้อมูลนี้ฉันได้กล่าวถึงการแจ้งเตือนการกำหนดค่าที่ครอบคลุมตามเคาน์เตอร์ Perfmon รายการบันทึกเหตุการณ์และในบทความ Windows Service Start and Stop เหตุการณ์นี้ แน่นอนคุณสามารถขยายสคริปต์ Powershell เหล่านี้อธิบายไว้ในบทความเหล่านี้เพื่อทำมากกว่าเพียงแค่ส่งอีเมล การแจ้งเตือนจำนวนมากหรือการหยุดให้บริการที่ไม่คาดคิดมักต้องการการแก้ไขบางอย่าง ทำไมไม่เพียงแค่สคริปต์ออกขั้นตอนการกู้คืนและปล่อยให้งานที่เรียกใช้ดูแลปัญหาสำหรับคุณ? ส่วนตัวผมขอแนะนำให้คุณลงทุนใน SCOM, SolarWinds หรือ Enterprise Management System อื่น ๆ แต่ถ้าไม่ได้อยู่ในการ์ดที่คุณทำงานบทความเหล่านี้สามารถช่วยในการหยิก เมื่อต้องการเรียนรู้เคล็ดลับเพิ่มเติมเกี่ยวกับ Email Alert เมื่อบริการเฉพาะของ Windows เริ่มหรือหยุดให้ติดต่อเราทำซ้ำโดยได้รับอนุญาตจาก Clusteringformeremortals.com