2016-12-28 22 views
4

人前說,這是一個重複的,我已經籤herehereherehere,和一對夫婦的其他資源,包括MS Task Scheduler Class documentation的。如何在C#中列出的計劃任務

我希望能夠使用我正在開發的C#程序在我的服務器上列出計劃任務。一些建議schtasks.exe MS程序,其他一個third-party library,這似乎是舊的,只能與.NET Framework 2.0和其他MS Task Scheduler Class,似乎被保護,我還沒有看到一些例子,所以我明白我可以如何使用它,而其他人甚至建議在C:\ Windows \ System32 \ Tasks文件夾下讀取每臺遠程計算機中的XML文件。

我的問題是:Windows中的任務很難與使用一些VS內置類一起工作?爲了做一些(某種)愚蠢的事情,我必須跳過這些瑣碎的事情,比如列出已經安排在機器上的任務嗎?

謝謝

編輯:

我結束了使用Process類和SchTasks.exe將開始對所有服務器。不是我正在尋找的東西,但它的工作原理。如果有人需要這些代碼,只需要給我一條線,然後在這裏發佈。謝謝。

+1

什麼是「似乎受保護」意味着在MS任務計劃程序類的上下文中? –

+0

@JimMischel,在[MS文檔](https://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.taskscheduler(v = vs.110).aspx)它說構造函數是保護。 –

+1

是的,但是'TaskScheduler.Current'是靜態的和公共的,就像'TaskScheduler.Default'一樣。構造函數只能用於派生類。在任何情況下,該類似乎都不是操作系統的計劃任務列表的界面。 –

回答

0

爲什麼不在你的C#代碼中使用powershell? Reference this for implementing powershell in your application.

而對於使用PowerShell一個PC /服務器上找到預定的任務,here's the link to do that.

與閱讀PowerShell的輸出在C#應用程序一起結合他們兩個,和瞧。

+0

我會最終嘗試這個瑞恩,謝謝。 –

+0

我剛剛檢查,顯然PowerShell Get-ScheduledTask和Get-ScheduledTaskInfo cmdlet無法檢索到我正在尋找的「以用戶身份運行」字段。也許我將不得不訴諸schtask.exe –

2

啊,System.Threading.TaskScheduler用於調度進程內的工作單元,與您可以從管理工具創建的計劃任務無關。

我會使用像https://taskscheduler.codeplex.com/這樣的庫 - Google搜索,我從2004年開始用類似於一個可怕的COM包裝來做類似的事情,我一直想要更新它。它可以很容易地看到計劃任務中的內容。

E.g.從他們的「枚舉所有任務」示例

void EnumAllTasks() 
{ 
    using (TaskService ts = new TaskService()) 
     EnumFolderTasks(ts.RootFolder); 
} 

void EnumFolderTasks(TaskFolder fld) 
{ 
    foreach (Task task in fld.Tasks) 
     ActOnTask(task); 
    foreach (TaskFolder sfld in fld.SubFolders) 
     EnumFolderTasks(sfld); 
} 

void ActOnTask(Task t) 
{ 
    // Do something interesting here 
}