Windows

Windows 計劃任務報告?

  • May 8, 2009

我們有大約12-14個Win200

$$ 3,8 $$伺服器一次聯機(一些虛擬機是暫時的)。其中大多數執行一些計劃任務。如何獲取每台伺服器上執行的所有計劃任務的列表,更重要的是,它們執行的域使用者?我們當然可以登錄到每台伺服器並詢問,但我想知道是否有一些 powershell 或其他系統來執行此操作(或 Active Directory 中的某些東西?) 很高興擁有它也可以在我們的 Windows XP 桌面上執行…不是要求,但更多的是僅供參考。謝謝!

Schtasks 是您的朋友 - AT 很老,並且 (SFAIK) 不理解使用 schtasks 創建的任務。不幸的是,Win32_ScheduledTask WMI 對像是基於 AT 的,否則它將是完美的。

不幸的是,AT 和 schtasks 都沒有報告作業執行的使用者。可能在某個地方有一個 COM 對象可以讓您做到這一點;也許你可以問stackoverflow?

如果你想編寫腳本,你可能會做這樣的事情:

$servers = 'server1','server2','server3'
$allTasks = @()
$servers | %{ 
   $data = schtasks /query /S $_ /fo list
   # Data looks like this:
   # <blank line> 
   # HostName:      [SERVER]
   # TaskName:      [TASK NAME]
   # Next Run Time: 12:00:00 PM, 5/9/2009
   # Status:        [BLANK or SOME ERROR]
   foreach ($line in $data){
       $blob=""|select Host, Task, Next, Status
       [void]$foreach.MoveNext(); $l = $foreach.Current.length;
       $blob.Host = $foreach.current.substring(15, $l-15)
       [void]$foreach.MoveNext(); $l = $foreach.Current.length;
       $blob.Task = $foreach.current.substring(15, $l-15)
       [void]$foreach.MoveNext(); $l = $foreach.Current.length;
       $blob.Next = $foreach.current.substring(15, $l-15)
       [void]$foreach.MoveNext(); $l = $foreach.Current.length;
       $blob.Status = $foreach.current.substring(15, $l-15)
       $allTasks += $blob
   }
}
$allTasks|format-table

這已成為一篇邪惡的程式碼文章 - 使用 /FO csv 選項轉儲到文本文件會更容易,使用 import-csv 將數據返回到 PS 中,但這樣會失去伺服器名稱。因此,您可以稍微炫耀一下並使用 foreach 列舉器進行自定義對象創建和修改。呼叫 MoveNext 會將您移至列表中的下一項,因此您跳過輸出的第一個空行,然後將接下來的 4 行中的每一行都變成有用的東西。

引用自:https://serverfault.com/questions/2725