系統測試 ─ Scheduled Tasks
手上的專案終於告一個段落,所以最近在寫一些簡單的測試程式,來確認目前系統設定及
相關服務是否都有正常運作。
這裡要分享一個好用的TaskScheduler類別庫,可以用來讀取目前Server上的系統排程運作狀
況,甚至還可以新增排程~相當貼心。
使用的方式也很簡單,我是把屬於我的系統的排程先一個一個找出來後,暫存到DataTable
裡面去,然後再Bind到GridView裡面。因為我的排程都是去執行某個執行檔,所以除了確認
排程目前設定的狀況,是否啟用之外,還確認了執行檔的路徑是否正確。
/// 確認排程
/// </summary>
private void checkTaskScheduler()
{
DataTable dt = new DataTable();
dt.Columns.Add("TaskName");
dt.Columns.Add("PathCheck");
dt.Columns.Add("Interval");
dt.Columns.Add("Enabled");
TaskService ts = new TaskService();
foreach (Task t in ts.RootFolder.Tasks)
{
DataRow row = dt.NewRow();
row["TaskName"] = t.Name;
row["PathCheck"] = getExecPath(t.Definition.Actions);
row["Interval"] = getIntervalStr(t.Definition.Triggers);
row["Enabled"] = t.Enabled;
dt.Rows.Add(row);
}
}
/// <summary>
/// 排程執行時間
/// </summary>
/// <param name="triggers"></param>
/// <returns></returns>
private string getIntervalStr(Microsoft.Win32.TaskScheduler.TriggerCollection triggers)
{
StringBuilder sb = new StringBuilder();
int i = 0;
foreach (Microsoft.Win32.TaskScheduler.Trigger trigger in triggers)
{
i++;
sb.AppendFormat("{0}. {1}", i, trigger.ToString());
}
return sb.ToString();
}
/// <summary>
/// 排程執行動作
/// </summary>
/// <param name="actions"></param>
/// <returns></returns>
private bool getExecPath(Microsoft.Win32.TaskScheduler.ActionCollection actions)
{
bool check = true;
foreach (Microsoft.Win32.TaskScheduler.Action action in actions)
{
string path = "";
switch (action.GetType().Name.ToLower())
{
case "execaction":
ExecAction ea = (ExecAction)action;
path = ea.Path;
File.Exists(path);
break;
}
if (!check) break;
}
return check;
}
為了容易辨別,所以我用圖來表示目前的狀況,下圖是我寫完的檢測結果:p