【问题标题】:Windows Server - Task Scheduler - Show which action is runningWindows Server - 任务计划程序 - 显示正在运行的操作
【发布时间】:2019-02-03 12:36:47
【问题描述】:

操作系统 - Windows Server 2012

我有一个包含 31 个操作的库存计划任务。每个操作都运行不同的 Powershell 脚本。如果其中一个操作/Powershell 脚本卡住了,我想知道它是哪一个,以便知道哪一个可能有编码问题。

有没有什么方法可以表明 31 个动作中哪个动作用完了?是否有一个 Powershell 脚本可以在我输入计划任务名称的地方运行,它会返回类似“处理 18 或 31 个操作”的内容?

要添加到此脚本的内容:

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

【问题讨论】:

  • 在任务计划程序的“历史记录”选项卡下,您可以查看已开始和完成的单个操作

标签: powershell scheduled-tasks


【解决方案1】:
  1. 如果 powershell.exe 进程“挂起”并且仍在运行,您可以通过任务调度系统传递给PowerShell.exe 进程的脚本名称找到该操作。

    您需要使用Get-WMIObject -ClassName Win32_Process 来访问传递给进程的参数,如this question 的回答中所述

  2. Answers to this question 指示任务计划程序的操作历史记录在 Windows 事件日志中的存储位置。每个操作的日志条目可能是可用的,并且可以通过您自己的 powershell 脚本进行过滤。

  3. 较低级别的 WMI/CIM 对象可能包含比 *-ScheduledTask cmdlet 公开的信息更多的信息。您可以使用Get-CimClass 探索MSFT_ScheduledTaskMSFT_TaskAction 等课程。

    乍一看似乎没有任何类型的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
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 2012-08-11
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多