Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

Schedule Task ให้เริ่มเมื่อ Task อื่นเสร็จสิ้น

ใน Windows Task Scheduler คุณสามารถรัน Task ทั้งตามตารางเวลาและหลังจาก Event เฉพาะถูกลงทะเบียนใน Log (มีการอธิบายในบทความ "Event Triggers in Windows") ในบทความนี้เราจะพิจารณาว่าจะ เริ่ม Scheduler Task อัตโนมัติหลังจาก Task ก่อนหน้าเสร็จสิ้น มาดู Algorithm การกำหนดค่า Dependencies ของการรัน Scheduler Tasks ซึ่งคุณสามารถปรับแต่งให้ตรงกับความต้องการของคุณ

ในกรณีของผม หลังจาก Script หนึ่งเสร็จสิ้น ผมต้องเริ่ม Script อีกตัวจากบัญชีผู้ใช้อีกตัว ดังนั้น การดำเนินการเหล่านี้ไม่สามารถรวมเป็น Task เดียวได้

สมมติว่า เราต้องเริ่ม Scheduler Task Pong หลังจาก Task Ping เสร็จสิ้น เมื่อ Task ใดๆ เริ่มหรือเสร็จสิ้น ข้อมูลเกี่ยวกับ Event นี้จะถูกลงทะเบียนใน System Log เราจะมุ่งเน้นที่ Event ของการเสร็จสิ้น Task Ping

เปิดคอนโซล Task Scheduler (Taskschd.msc) ระบุและเลือก Event Ping และในแผงด้านล่างไปที่แท็บ History ซึ่งมีข้อมูลเกี่ยวกับ Event ทั้งหมดที่เกี่ยวข้องกับ Task นี้ เราต้องการ Event ที่มี Event ID 102 (Task Completed) ซึ่งสร้างขึ้นหลังจาก Task เสร็จสิ้น

Schedule Task ให้เริ่มเมื่อ Task อื่นเสร็จสิ้น

เปิดคำอธิบาย Event รายละเอียดโดยไปที่แท็บ Detail และเปิดใช้งาน XML View ของ Event ตามข้อมูล XML คุณสามารถรับรายละเอียดทั้งหมดของ Event ที่จำเป็นสำหรับการสร้าง Filter โดยเฉพาะเราต้องการ:

EventID: 102
Provider-Name: Microsoft-Windows-TaskScheduler
Channel: Microsoft-Windows-TaskScheduler/Operational
TaskName: \ping

Schedule Task ให้เริ่มเมื่อ Task อื่นเสร็จสิ้น

เมื่อสร้าง Trigger สำหรับ Task Pong เราต้องสร้างเงื่อนไข Trigger สำหรับ Task เริ่มเมื่อ Event ที่มี ID 102 ปรากฏใน Log (Task Trigger On an event) แต่ปัญหาคือ EventID 102 ปรากฏหลังจาก Task ใดๆ เสร็จสิ้น ไม่ใช่แค่ Task Ping Schedule Task ให้เริ่มเมื่อ Task อื่นเสร็จสิ้น

อย่างไรก็ตาม สามารถสร้างเงื่อนไขการเลือก Event ที่ยืดหยุ่นมากขึ้น (Custom) ได้ หาก Filter มาตรฐานไม่ช่วยเลือก Event ได้อย่างแม่นพอพอ คลิก New Event Filter:

Schedule Task ให้เริ่มเมื่อ Task อื่นเสร็จสิ้น

สร้าง Event Filter ใหม่โดยระบุข้อมูลจาก XML View ของ Event:

Events Logs: Microsoft-Windows-TaskScheduler/Operational

Event Source: TaskScheduler

Task Category: Task Completed

Schedule Task ให้เริ่มเมื่อ Task อื่นเสร็จสิ้น

จากนั้นไปที่แท็บ XML และดูมุมมอง Filter ต่อไปนี้ (XPath):

<QueryList>
<Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
<Select Path="Microsoft-Windows-TaskScheduler/Operational">*[System[Provider[@Name='Microsoft-Windows-TaskScheduler'] and Task = 102]]</Select>
</Query>
</QueryList>

Schedule Task ให้เริ่มเมื่อ Task อื่นเสร็จสิ้น

เปลี่ยนโค้ด XPath เป็นดังต่อไปนี้ ซึ่งจะกรอง Log และค้นหา Event TaskCompleted สำหรับ Task \ping:

<QueryList>
<Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
<Select Path="Microsoft-Windows-TaskScheduler/Operational">*[System[Provider[@Name='Microsoft-Windows-TaskScheduler'] and Task = 102]]</Select>
</Query>
</QueryList>

Schedule Task ให้เริ่มเมื่อ Task อื่นเสร็จสิ้น

หลังจากเพิ่ม Event แล้ว ลองเริ่ม Task Ping เมื่อเสร็จสิ้น Task Pong ต้องเริ่มทันที

คำอธิบาย XPath แสดงด้านล่าง:

Schedule Task ให้เริ่มเมื่อ Task อื่นเสร็จสิ้น