Windows Server-任务计划程序-显示正在运行的操作

时间:2018-08-28 19:52:53

标签: powershell scheduled-tasks

操作系统-Windows Server 2012

我有一个包含31个动作的清单计划任务。每个操作都运行不同的Powershell脚本。如果动作/ Powershell脚本之一卡住了,我想知道它是哪个,这样我就知道哪个可能有编码问题。

是否有任何方法可以指示31个操作中的哪个操作已用完?在输入计划的任务名称的地方可以运行Powershell脚本,该脚本将返回“正在处理18或31个操作”之类的内容吗?

要添加到此脚本的内容:

Get-ScheduledTask |where TaskName -EQ 'Inventory_Part3'| Get-ScheduledTaskInfo 

1 个答案:

答案 0 :(得分:0)

  1. 如果powershell.exe进程仍在“挂起”(如仍在运行),则可以通过任务调度系统传递给PowerShell.exe进程的脚本名称来查找操作。

    您需要使用Get-WMIObject -ClassName Win32_Process来访问传递给该过程的参数,如对this question

  2. 的回答中所述
  3. Answers to this question指示Windows Windows事件日志中存储任务计划程序的操作历史记录的位置。每次操作日志条目可能会通过您自己的powershell脚本提供和过滤。

  4. 更低级别的WMI / CIM对象可能包含比*-ScheduledTask cmdlet公开的信息更多的信息。您可以使用MSFT_ScheduledTask探索类似MSFT_TaskActionGet-CimClass的类。

    乍看之下似乎没有任何CurrentAction属性,但是进一步挖掘可能会发现有用的东西。

您的任务的实时状态应该通过Schedule.Service COM对象可见。不幸的是,我现在仅限于Linux,所以我无法访问测试环境。

粗体:

  1. 这里是vbscript examples of querying the task scheduler service here。任务计划程序作为COM对象Schedule.Service公开,PowerShell应该可以对其进行操作。

  2. TaskService对象有一个GetRunningTasks成员,该成员应该向您返回...的集合。

  3. RunningTask对象,该对象具有CurrentAction属性

我怀疑代码看起来像这样(但同样,我没有地方可以测试):

$TaskScheduleService = New-Object -comobject 'Schedule.Service'
$TaskScheduleService.Connect()
$RunningTasks = $TaskScheduleService.GetRunningTasks()
$RunningTasks | Where-Object {<#some kind of filter to get only your tasks#>} |
    Foreach-Object {
        $_.CurrentAction
    }
相关问题