Windows计划任务报告?

我们每次在线有大约12-14台Win200 [3,8]服务器(有些虚拟机是暂时的)。 其中大部分运行一些计划的任务。 我怎样才能得到每个服务器上运行的所有计划任务的列表,更重要的是,他们正在运行的域用户? 我们当然可以login到每个服务器,并问,但是想知道是否有一些PowerShell或其他系统来做到这一点(或在Active Directory?)

一个很好的,将允许这也运行在我们的Windows XP桌面上,也…没有要求,但更多的FYI。 谢谢!

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会更容易,但这样就会丢失服务器名称。 所以相反,你可以炫耀一下,做自定义对象创build和黑客与foreach枚举。 调用MoveNext会将您移动到列表中的下一个项目,因此您可以跳过输出的第一个空行,然后采用下一行中的每一行,并将它们变成有用的东西。

内置的任务计划程序应该支持连接到远程计算机(像大多数Windows工具一样),并pipe理远程计算机的任务(在XP中实际上没有尝试过,但微软似乎应该这么说 )。

处理和推测列出计划任务的at命令也可以由远程计算机连接到。 因为它是一个控制台命令,所以编写脚本可以很容易地连接到一个计算机列表并显示所有任务。 无论如何理论上^^