在作業系統Shutdown時執行特定程式

先前曾教大家如何在作業系統啟動時執行特定程式。當然!有開機執行相對的就有關機執行。首先確認了工作排程器有支援Event觸發的方式,接著確認如何辨別Shutdown事件。我透過了shutdown /s /t 100做Shutdown,並在事件檢視器中發現shutdown /sshutdown /r都為id=1074的系統事件,也從MSDN中做了再次確認。(請用shutdown /a取消關機動作)


接下來就告訴大家如何透過batch去實做。

與先前再啟動執行不同的是,/SC改透過ONEVENT。另外也會透過/EC與/MO參數分別指定事件通道與過濾的事件內容。

scheduleTaskOnShutdown.bat
@echo off
set RUN_TASK="%1"
if %RUN_TASK% == "" goto emptyError
 
set TASK_NAME=%~nx1
 
schtasks /Create /RL HIGHEST /RU SYSTEM /TN %TASK_NAME% /SC ONEVENT /TR %RUN_TASK% /EC SYSTEM /MO *[System/EventID=1074]
 
goto :finish
 
:emptyError
echo Please enter a valid cmd
goto :finish
 
:finish
 
pause

你可以透過操作工作排程器的UI去決定/EC與/MO該如何丟。(工作排程器>建立工作>開始工作:事件發生時>自訂>新事件篩選器)

設定完再切換到XML看內容就可以知道了。

另外,我也從MSDN中發現某些參數在XP與2003之前是不支援的! 還好2003和XP已經要完全被EOL了。

友藏內心獨白: 為什麼會有需要開機與關機執行特定程式呢? 讓我們繼續看下去。