操作系统-Windows Server 2012
我有一个包含31个动作的清单计划任务。每个操作都运行不同的Powershell脚本。如果动作/ Powershell脚本之一卡住了,我想知道它是哪个,这样我就知道哪个可能有编码问题。
是否有任何方法可以指示31个操作中的哪个操作已用完?在输入计划的任务名称的地方可以运行Powershell脚本,该脚本将返回“正在处理18或31个操作”之类的内容吗?
要添加到此脚本的内容:
Get-ScheduledTask |where TaskName -EQ 'Inventory_Part3'| Get-ScheduledTaskInfo
答案 0 :(得分:0)
如果powershell.exe进程仍在“挂起”(如仍在运行),则可以通过任务调度系统传递给PowerShell.exe
进程的脚本名称来查找操作。
您需要使用Get-WMIObject -ClassName Win32_Process
来访问传递给该过程的参数,如对this question
Answers to this question指示Windows Windows事件日志中存储任务计划程序的操作历史记录的位置。每次操作日志条目可能会通过您自己的powershell脚本提供和过滤。
更低级别的WMI / CIM对象可能包含比*-ScheduledTask
cmdlet公开的信息更多的信息。您可以使用MSFT_ScheduledTask
探索类似MSFT_TaskAction
和Get-CimClass
的类。
乍看之下似乎没有任何CurrentAction
属性,但是进一步挖掘可能会发现有用的东西。
您的任务的实时状态应该通过Schedule.Service
COM对象可见。不幸的是,我现在仅限于Linux,所以我无法访问测试环境。
粗体:
这里是vbscript examples of querying the task scheduler service here。任务计划程序作为COM对象Schedule.Service
公开,PowerShell应该可以对其进行操作。
TaskService对象有一个GetRunningTasks成员,该成员应该向您返回...的集合。
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
}