WMI 任务:计划任务

WMI 计划任务创建并获取有关计划任务的信息。 有关其他示例,请通过 https://www.microsoft.com/technet 访问 TechNet ScriptCenter。

本主题中所示的脚本示例仅从本地计算机获取数据。 有关如何使用脚本从远程计算机获取数据的详细信息,请参阅连接到远程计算机上的 WMI

以下过程介绍了如何运行脚本。

运行脚本

  1. 复制代码并将其保存在扩展名为 .vbs 的文件中,例如 filename.vbs。 确保文本编辑器不会向该文件添加 .txt 扩展名。
  2. 打开命令提示符窗口并导航到保存该文件的目录。
  3. 在命令提示符下键入 cscript filename.vbs。
  4. 如果无法访问事件日志,请进行检查以查看是否正从提升的命令提示符运行。 某些事件日志(例如安全事件日志)可能受用户访问控制 (UAC) 的保护。

注意

默认情况下,cscript 会在命令提示符窗口中显示脚本的输出。 由于 WMI 脚本可以生成大量输出,因此可能需要将输出重定向到文件。 在命令提示符下键入 cscript filename.vbs > outfile.txt 以将 filename.vbs 脚本的输出重定向到 outfile.txt。

下表列出了可用于从本地计算机获取各种类型的数据的脚本示例。

如何实现... WMI 类或方法
...使用脚本创建计划任务? 使用 Win32_ScheduledJob 类和 Create 方法。 如果在 Windows 7 或更高版本上执行此任务时遇到问题,请参阅 Win32_ScheduledJob 的“备注”部分;你的设置可能阻止使用该类。
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
JobID = "Test"
Set objNewJob = objWMIService.Get("Win32_ScheduledJob")
errJobCreate = objNewJob.Create _
    ("Notepad.exe", "********143000.000000-420", True , 1 OR 4 OR 16, ,True, JobId) 
If errJobCreate = 0 Then
    WScript.Echo "Job created successfully: " & VBNewLine _
        & "Notepad.exe scheduled to run repeately at 14.30 (2:30 P.M.) PST" & VBNewLine _
        & "on Mon, Wed, and Fri."
Else
    WScript.Echo "Job not created. Error code = " & errJobCreate
End If

在字符串“********143000.000000-420”(在 Create 方法的 StartTime 参数值中使用)中,“** ******143000.000000”指定任务在 14.30(下午 2:30)启动,“-420”指定时区。 时区编号是本地时间转换的当前偏差。 偏差是 UTC 时间和本地时间之差。 若要计算所在时区的偏差,请将该时区早于或晚于格林威治标准时间 (GMT) 的小时数乘以 60(如果该时区早于格林威治标准时间,请使用正数作为小时数,如果该时区晚于 GMT,则使用负数)。 如果时区使用夏令时,请在计算中额外加上 60。 例如,太平洋标准时区比 GMT 晚 8 个小时,因此在使用夏令时时,偏差等于 -420 (-8 * 60 + 60),在未使用夏令时时,偏差等于 -480 (-8 * 60)。 还可以通过查询 Win32_TimeZone 类的 bias 属性来确定偏差值。

...返回计算机上所有计划任务的列表?

使用 Win32_ScheduledJob 类。 请注意,此类只能返回使用脚本或 AT.exe 创建的作业。 它无法返回有关计划任务向导创建或修改的作业的信息。

VB
strComputer = "."
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colScheduledJobs = objWMIService.ExecQuery ("Select * from Win32_ScheduledJob")
For Each objJob in colScheduledJobs
    Wscript.Echo "Command: " & objJob.Command & VBNewLine _
    & "Days Of Month: " & objJob.DaysOfMonth & VBNewLine _
    & "Days Of Week: " & objJob.DaysOfWeek & VBNewLine _
    & "Description: " & objJob.Description & VBNewLine _
    & "Elapsed Time: " & objJob.ElapsedTime & VBNewLine _
    & "Install Date: " & objJob.InstallDate & VBNewLine _
    & "Interact with Desktop: " & objJob.InteractWithDesktop & VBNewLine _
    & "Job ID: " & objJob.JobId & VBNewLine _
    & "Job Status: " & objJob.JobStatus & VBNewLine _
    & "Name: " & objJob.Name & VBNewLine _
    & "Notify: " & objJob.Notify & VBNewLine _
    & "Owner: " & objJob.Owner & VBNewLine _
    & "Priority: " & objJob.Priority & VBNewLine _
    & "Run Repeatedly: " & objJob.RunRepeatedly & VBNewLine _
    & "Start Time: " & objJob.StartTime & VBNewLine _
    & "Status: " & objJob.Status & VBNewLine _
    & "Time Submitted: " & objJob.TimeSubmitted & VBNewLine _
    & "Until Time: " & objJob.UntilTime
Next

脚本和应用程序的 WMI 任务

WMI C++ 应用程序示例

TechNet ScriptCenter