排程的工作Task Scheduler程式應用

使用Task Scheduler Managed Wrapper去寫程式取得或設定1.0及2.0版Task Schedule(排定的工作).

使用Task Scheduler Managed Wrapper去寫程式取得或設定1.0及2.0版Task Schedule(排定的工作).

1個月前才寫過一篇 [用程式去維護作業系統的"排定的工作"],最近在CodePlex看到一篇也是有關Task Schedule的,於是這次改用CodePlex上所提供的方法來試做,看能不能用來減化我自己的工作.

我自己是有這樣的困擾,因為有很多台電腦都有設排程,有時為了看一個排程的設定,或是每台電腦有一個排程要改時間,我就必需遠端登入到每台電腦裡去修改,這個登入的動作感覺很沒必要,也很浪費時間,所以希望能在我的本機上,就可以看到每台電腦的排程設定及修改排程.

這次要用CodePlex上的做法,所以就需要下載它的元件,這個元件可至CodePlex下載,這裡就不提供,下載好元件,解開後會看到一堆檔案及目錄,而最重要的是它有提供說明檔TaskScheduler.chm,裡面也有很詳盡的說明,這些都好了之後,就可以開始使用TaskScheduler.

首先在我們的專案將剛剛目錄下的Microsoft.Win32.TaskScheduler.dll加入參考,雖然還有其它兩個dll,但這次只有用到這個,另外兩個就先不用了.加入參考後,接下來當然是要using這個namespace.

 

using Microsoft.Win32.TaskScheduler;

//取得排程 :
try
{
	using (TaskService ts = new TaskService(""))
	{//如果帶入空白參數或是不帶,則會帶出本機的排程,要帶入其它電腦,就帶入電腦名稱
	 //也可帶入有權限的帳號及密碼
		using (TaskFolder tf = ts.GetFolder(""))
		{//GetFolder在1.X只要帶入空白即可,2.0才有支援
			using (DataTable dt = new DataTable())
			{
				dt.Columns.Add("Name");
				dt.Columns.Add("Enabled");
				dt.Columns.Add("LastRunTime");
				dt.Columns.Add("LastTaskResult");
				dt.Columns.Add("NextRunTime");
				dt.Columns.Add("Path");
				dt.Columns.Add("State");
				dt.Columns.Add("Connected");
				foreach (Task t in tf.Tasks)
				{
					DataRow dr = dt.NewRow();
					dr["Name"] = t.Name;//名稱
					dr["Enabled"] = t.Enabled;//啟用
					dr["LastRunTime"] = t.LastRunTime;//最後一次執行時間
					dr["LastTaskResult"] = t.LastTaskResult;//最後一次執行結果
					dr["NextRunTime"] = t.NextRunTime;//下次執行時間
					dr["Path"] = t.Path;//路徑
					dr["State"] = t.State;//狀態
					dr["Connected"] = t.TaskService.Connected;//連線狀態
					dt.Rows.Add(dr);
				}
				gridList.DataSource = dt;
			}
		}
	}
}
catch (Exception ex)
{
	MessageBox.Show(ex.Message);
}

呼叫出設定視窗,這點我就比較偷懶,沒有再自己寫下去每個設定,我是直接用Task的ShowPropertyPage(),這樣就可以直接使用OS自己的Task Scheduler介面來維護(僅支援1.0),有現成的介面,就用它來做就好,這樣也能達到我的需求了.

刪除排程 :

TaskFolder.DeleteTask(“排程名稱”)

新增排程空白排程 :

TaskDefinition td = ts.NewTask();

Microsoft.Win32.TaskScheduler.Task T= TaskFolder.RegisterTaskDefinition(“TaskName”, td);

t.ShowPropertyPage();//設定新增的空白排程

 

因為我偷懶的關係,只想要以最少的動作,最快的速度來達成自己的需求,所以是直接用ShowPropertyPage來設定,但其實它還有很多功能,請自行參考CodePlex上的教學或是說明檔TaskScheduler.chm.

 

以下為Sample Code的操作介面 :

image

L清單維護 : 維護電腦名稱清單.

R重新載入 : 重新載入工作排程清單

A新增 : 新增一個工作排程

S設定排程 : 設定工作排程(編輯)

D刪除 : 刪除工作排程

E離開 : 關閉程式

 

參考 :

Task Scheduler Managed Wrapper: 由程式來排程工作

Task Scheduler Managed Wrapper

範例 : WinScheduleTool.zip