อีเมลเซิร์ฟเวอร์ 2008 บนตัวแปรเหตุการณ์


13

หนึ่งในคุณสมบัติใหม่ของ Server 2008 คือความสามารถในการแนบงานกับเหตุการณ์เฉพาะในบันทึกเหตุการณ์ หนึ่งในการดำเนินการที่มีคือการส่งอีเมลผ่านเซิร์ฟเวอร์ SMTP

สิ่งนี้ใช้งานได้ดี แต่จะเหมาะถ้าเนื้อหาของข้อความสามารถวางเนื้อหาของกิจกรรมได้ ฉันได้ลองใช้ $ eventdescription และ% eventdescription% แต่นั่นเป็นเพียงภาพในความมืด จำนวน googling ใด ๆ ก็ไม่ได้ผลลัพธ์

ไม่มีใครรู้ว่าสิ่งนี้เป็นไปได้?

อัปเดต : ข้อเสนอแนะของประกายไฟด้านล่างเป็นขั้นตอนในทิศทางที่ถูกต้องฉันเชื่อว่าวิธีการนี้ดูเหมือนจะไม่สามารถใช้ได้กับค่าทั้งหมด ตัวอย่างเช่นฉันสามารถดึง RecordID, Severity และ Channel ดังที่แสดง แต่ฉันไม่สามารถใช้วิธีเดียวกันในการเรียก EventID กลับมาหรือที่สำคัญที่สุดคือคำอธิบาย

นี่คือ XML ดิบจากเหตุการณ์:

[Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"]
  [System]
    [Provider Name="DFSR" /] 
    [EventID Qualifiers="16384"]4412[/EventID] 
    [Level]4[/Level] 
    [Task]0[/Task] 
    [Keywords]0x80000000000000[/Keywords] 
    [TimeCreated SystemTime="2009-05-14T18:18:09.000Z" /] 
    [EventRecordID]45692[/EventRecordID] 
    [Channel]DFS Replication[/Channel] 
    [Computer]servername.domain.com[/Computer] 
    [Security /] 
    [/System]
  [EventData]
    [Data]9046C3F4-843E-4A53-B941-4B20764072E5[/Data] 
    [Data]D:\departments\Geomatics\Plan Quality\Data Processing\CG3533017 2009-05-13 KT FIXED[/Data] 
    [Data]D:\departments[/Data] 
    [Data]{26D5F604-E603-4F87-8EC3-DE9A945DA8FD}-v927199[/Data] 
    [Data]Departments[/Data] 
    [Data]domain.ca\files\departments[/Data] 
    [Data]B8242CE2-F5EB-47DA-BA5B-1DD2F7EE3AB9[/Data] 
    [Data]DFAA7A54-66CB-4C31-81A0-0F861382C32C[/Data] 
    [Data]CG3533017 2009-05-13-{26D5F604-E603-4F87-8EC3-DE9A945DA8FD}-v927199[/Data] 
  [/EventData]
 [/Event]

ฉันได้ลองใช้ ValueQuery สำหรับ EventData แต่ไม่ส่งคืนข้อมูล


+1 - เราใช้สิ่งนี้เพื่อส่งการแจ้งเตือนจากเว็บเซิร์ฟเวอร์ของเราและฉันต้องการข้อมูลเพิ่มเติมในอีเมล! ฉันจะเก็บตาบนกระทู้นี้ ...
คี ธ วิลเลียมส์

คำตอบ:


3

ฉันไปเกี่ยวกับเรื่องนี้แตกต่างกันเล็กน้อย แต่วิธีการนี้จะสร้างอีเมลในกิจกรรมใหม่ที่ตรงกับตัวกรองที่กำหนดเองโดยมีรายละเอียดเหตุการณ์ทั้งหมดรวมอยู่ในเนื้อหาของอีเมล

1) สร้าง 'มุมมองที่กำหนดเอง' ในตัวแสดงเหตุการณ์ด้วยตัวกรองที่คุณต้องการ

2) เมื่อคุณมีมุมมองแล้วคุณจะเห็นลิงค์ 'แนบงานกับมุมมองที่กำหนดเองนี้ ... '

ฉันเลือกที่จะใช้ sendMail.exe จากที่นี่ ( http://caspian.dotconf.net/menu/Software/SendEmail/ ) ซึ่งฉันแยกไปที่ C: \ sendmail เหตุผลคือการกระทำ 'ส่งอีเมล' ของ Microsoft มีปัญหากับการตรวจสอบสิทธิ์ SMTP และเห็นได้ชัดว่าไม่ได้อยู่ใน Server 2012

ดังนั้นในกรณีของฉันฉันเลือก 'เริ่มโปรแกรม' ขณะที่แนบงานกับมุมมองกำหนดเอง แต่เราจะแก้ไขเป็น XML ดังนั้นไม่ต้องกังวลกับการเติมผ่าน GUI

3) ส่งออกภารกิจใหม่เป็น XML เราจะแก้ไขในภายหลัง

4) สร้างไฟล์ 'mail-event.bat' ภายใต้โฟลเดอร์ C: \ sendmail ด้วย 3 บรรทัดต่อไปนี้:

C:\Windows\system32\wevtutil.exe qe Application /f:text /q:"<QueryList><Query Id='0' Path='Application'><Select Path='Application'>*[System[(EventRecordID=%1)]]</Select></Query></QueryList>" > C:\sendmail\%1.log
C:\sendmail\sendEmail.exe -s <smtp_server> -f <from> -xu <user> -xp <pass> -t <to> -u "<subject>" -o message-file=c:\sendmail\%1.log
del C:\sendmail\%1.log

เห็นได้ชัดว่าแทนที่ 'smtp_server', 'จาก', 'ผู้ใช้', 'ผ่าน', 'ถึง', 'เรื่อง' ด้วยค่าที่ต้องการ

สิ่งนี้จะสร้างไฟล์ '$ (EventRecordID) .log' ใต้ C: \ sendmail พร้อมรายละเอียดทั้งหมดสำหรับเหตุการณ์นั้นส่งเมลแล้วลบออก

คุณสามารถทดสอบว่าแบทช์ไฟล์ทำงานได้หรือไม่โดยไปที่ตัวแสดงเหตุการณ์การเปิดกิจกรรมในบันทึกแอปพลิเคชันของคุณสลับไปที่แท็บรายละเอียดเลือก 'มุมมอง XML' แล้วมองหา EventRecordID คัดลอกจำนวนเต็มนั้นแล้วเรียกใช้จากบรรทัดคำสั่ง:

C: \ sendmail> log-event.bat 53522

แน่นอนแทนที่ 53522 ด้วยค่าจากโหนด EventRecordID หากคุณได้รับอีเมลโปรดไปยังสถานที่ที่คุณมีความสุข

หมายเหตุ: คุณอาจสังเกตเห็นสตริง 'Application' ปรากฏขึ้นสองสามครั้งในบรรทัดคำสั่งสำหรับ wevtutil.exe - นั่นเป็นเพราะฉันไม่สามารถทำงานได้โดยการชี้ไปที่มุมมองกำหนดเองโดยตรงและ มุมมองที่กำหนดเองเกิดขึ้นเป็นชุดย่อยของเหตุการณ์ที่อยู่ในบันทึกของแอปพลิเคชัน คุณอาจต้องปรับตัวเพื่อให้มันทำงานในกรณีของคุณถ้าคุณพยายามส่งเมล์จากบันทึกของระบบ

5) แก้ไข XML ที่คุณส่งออกเราจะทำการเปลี่ยนแปลงสองอย่าง:

ขั้นแรกเพิ่มโหนด 'ValueQueries' ต่อไปนี้ลงใน XML ภายใต้โหนด 'EventTrigger':

<EventTrigger>
  <Enabled>true</Enabled>
  <Subscription>...snip...</Subscription>
  <ValueQueries>
    <Value name="EventRecordID">Event/System/EventRecordID</Value>
  </ValueQueries>  
</EventTrigger>

หมายเหตุ: ข้างต้นฉันตัดข้อมูล 'การสมัคร' ซึ่งจะถูกกรอกตามมุมมองที่กำหนดเองที่คุณสร้างขึ้น อย่าคัดลอก 'สมัครสมาชิก' ของฉันลงใน XML ของคุณ!

ประการที่สองแทนที่โหนดการกระทำด้วยสิ่งต่อไปนี้:

<Actions Context="Author">
   <Exec>
     <Command>C:\sendmail\mail_event.bat</Command>
     <Arguments>$(EventRecordID)</Arguments>
   </Exec>
</Actions>

ตอนนี้ทำให้กิจกรรมใหม่ปรากฏในมุมมองที่กำหนดเองของคุณและคุณควรได้รับการแจ้งเตือนทางอีเมลโดยอัตโนมัติ! ดีจัง!


1

ฉันไม่สามารถเข้าถึงเครื่อง Server 2008 หรือ Vista เพื่อทดลองใช้งานเองและรับตัวแปรสำหรับคุณ แต่บทความนี้ควรใช้งาน

หากคุณสร้างงานขั้นพื้นฐานจากนั้นดู XML ของงานที่คุณควรเห็นค่าทั้งหมดที่มีอยู่

http://blogs.technet.com/otto/archive/2007/11/09/find-the-event-that-triggered-your-task.aspx


1

ใช้เอกสารในลิงก์ที่ให้บริการโดย Sparks เพิ่มบรรทัดเพิ่มเติมนี้ไปยัง XML ที่ส่งออกจาก Task Scheduler เพื่อรับข้อความเหตุการณ์ของคุณ:

<Value name="eventData">Event/EventData/Data</Value>

ยังน่าสนใจ (และหวังว่าจะอธิบายด้วยตนเอง):

<Value name="eventTimeCreated">Event/System/TimeCreated/@SystemTime</Value>

ฉันพบ Googling "เหตุการณ์ / ระบบ / EventRecordID"

จากนั้นคุณสามารถอ้างอิงตัวแปร $ (eventData) และ $ (eventTimeCreated) ในงานของคุณ

ดูเหมือนว่าจะมีการระบุค่าโดยการเลื่อนผ่านลำดับชั้น XML ฉันคาดว่าคุณจะสามารถระบุส่วนใดก็ได้ของเหตุการณ์ส่วนใหญ่ด้วยการแยกการถ่ายโอนข้อมูล XML แบบดิบเพื่อสร้างนิพจน์ที่คั่นด้วยเครื่องหมายทับ

ดูเหมือนว่า '/ @' เป็นชวเลขสำหรับอักขระช่องว่างในไวยากรณ์นี้


เพิ่งเพิ่มสิ่งนี้ไปยังกิจกรรมของฉันเราจะดูว่ามันใช้งานได้ในครั้งต่อไปที่มีข้อขัดแย้ง DFSR หรือไม่ ขอบคุณสำหรับคำตอบฉันจะให้คุณโพสต์
Jeff Miles

1

คุณหลังจากข้อมูลเหตุการณ์หรือไม่

ความต้องการของฉันคือการส่งอีเมลทุกครั้งที่ IIS Application Pool ปิดตัวลงเนื่องจากไม่มีการใช้งาน ฉันต้องการชื่อของแอพที่กำลังปิดเพื่อให้ปรากฏในข้อความอีเมล

สิ่งนี้ใช้ได้กับฉัน:

<Value name = "appPoolId"> กิจกรรม / EventData / Data [@ Name = 'AppPoolID'] </Value>


1

ฉันไม่เคยทำให้การทำงานนี้จบลงและดูเหมือนว่าสำหรับ Server 2012 ฟังก์ชันการทำงานของอีเมลนี้ถูกลบอย่างสมบูรณ์ ปลายตายอย่างน่าเสียดาย


0

ฉันคิดว่าฉันพัฒนาความคิดของคุณเสร็จแล้ว

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2013-02-07T17:30:20.8644895</Date>
    <Author>QA\TimT</Author>
  </RegistrationInfo>
  <Triggers>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="ForwardedEvents"&gt;&lt;Select Path="ForwardedEvents"&gt;*&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
      <ValueQueries>
        <Value name="EventChannel">Event/System/Channel</Value>
        <Value name="EventComputer">Event/System/Computer</Value>
        <Value name="EventData">Event/EventData/Data</Value>
        <Value name="EventID">Event/System/EventID</Value>
        <Value name="EventRecordID">Event/System/EventRecordID</Value>
        <Value name="EventSeverity">Event/System/Level</Value>
        <Value name="Message">Event/RenderingInfo/Message</Value>
      </ValueQueries>
    </EventTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>QA\Administrator</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <SendEmail>
      <Server>mail.nowhere.com</Server>
      <Subject>$(EventComputer) reports event $(EventID) in $(EventChannel), record $(EventRecordID), severety $(EventSeverity)</Subject>
      <To>admin@nowhere.com</To>
      <From>reporter@nowhere.com</From>
      <Body>$(EventData)
$(Message)</Body>
      <HeaderFields />
      <Attachments />
    </SendEmail>
  </Actions>
</Task>

ได้โปรดอย่าเพิ่งทิ้งดั๊กโค้ด (สำหรับคำถามสามปี) แต่อธิบายสิ่งที่คุณทำ
สเวน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.