WMI查询MSFT_TaskDynamicInfo返回空,如何获取任务计划运行时间?
解决WMI查询任务计划LastRunTime和NextRunTime返回空值的问题
问题根源
直接查询MSFT_TaskDynamicInfo返回空值,是因为该类的实例并非通过TaskName和TaskPath直接过滤,而是通过Task属性关联到MSFT_ScheduledTask的实例路径,必须通过关联查询才能获取对应任务的动态运行信息。
正确的WMI查询方法
1. 针对单个任务的查询
要获取名为Restart Computer、路径为\的任务动态信息,使用WQL关联查询:
SELECT d.LastRunTime, d.NextRunTime, s.TaskName, s.TaskPath, s.State FROM MSFT_ScheduledTask s JOIN MSFT_TaskDynamicInfo d ON s.__PATH = d.Task WHERE s.TaskName='Restart Computer' AND s.TaskPath='\\'
注意:WQL中反斜杠是转义字符,因此任务路径
\需要写成\\。
在PowerShell中执行该查询的命令:
Get-WmiObject -Namespace "ROOT\Microsoft\Windows\TaskScheduler" -Query "SELECT d.LastRunTime, d.NextRunTime, s.TaskName, s.TaskPath, s.State FROM MSFT_ScheduledTask s JOIN MSFT_TaskDynamicInfo d ON s.__PATH = d.Task WHERE s.TaskName='Restart Computer' AND s.TaskPath='\\'"
2. 筛选关联指定可执行文件的任务
要实现和原PowerShell脚本相同的功能——筛选关联指定可执行文件(比如shutdown.exe)的任务并返回完整信息,使用以下WQL查询:
SELECT s.TaskName, s.TaskPath, s.State, d.LastRunTime, d.NextRunTime, s.Triggers/StartBoundary AS Triggers, s.Triggers/DaysOfWeek AS DaysOfWeek, s.Triggers/WeeksInterval AS WeeksInterval, s.Actions/Execute AS Execute, s.Actions/Arguments AS Arguments FROM MSFT_ScheduledTask s JOIN MSFT_TaskDynamicInfo d ON s.__PATH = d.Task WHERE s.Actions/Execute LIKE '%shutdown%'
3. 无PowerShell环境下的wmic命令
如果设备不支持PowerShell,可以使用wmic.exe执行查询:
wmic /namespace:\\root\microsoft\windows\taskscheduler query "SELECT d.LastRunTime, d.NextRunTime, s.TaskName, s.TaskPath FROM MSFT_ScheduledTask s JOIN MSFT_TaskDynamicInfo d ON s.__PATH = d.Task WHERE s.TaskName='Restart Computer' AND s.TaskPath='\\'"
注意事项
- 权限要求:部分系统任务需要管理员权限才能查询,执行WMI/wmic命令时请确保以管理员身份运行。
- 属性路径语法:在WQL中访问嵌套属性(比如
Actions/Execute)需要使用斜杠分隔,而非PowerShell中的点语法。 - 转义字符:所有反斜杠路径都需要双写(
\→\\),避免被WQL解析为转义字符。
内容的提问来源于stack exchange,提问作者Michael George
相关产品推荐
相关产品推荐

