我需要找到一些方法来禁用远程计算机上的计划任务和如果该任务恰好正在运行,则等待该任务停止执行。如果可能的话,我想通过 WMIC 来执行此操作。这将集成到更大的批处理过程中。
这是我目前得到的信息:
> wmic /node:%SERVER_NAME% /namespace:\\root\cimv2 path Win32_ScheduledJob
但这只会返回:
No Instance(s) Available.
所以我不确定我是否做错了什么或者是否需要在服务器上配置一些东西。
答案1
似乎WMIC
仅支持使用其自身创建WMIC
或使用AT
命令创建的作业(来源- 从第 205 页开始)。
这当然是你得到的原因No Instance(s) Available.
我也是 Powershell 的狂热爱好者,但如果它是一个问题,您可以使用schtasks
实用程序(正如您所提到的)。
要远程禁用任务:
schtasks /change /disable /TN "task name" /S server_fqdn /U domain\user /P password
禁用任务的优点是,您可以确保它将继续运行直到完成(在这种情况下,只有未来的执行才会被禁用)。
如果您想等到任务完成,则必须等待该过程完成。为了避免使用其他第三方工具/命令,您也可以schtasks
通过查询任务状态来执行此操作:
schtasks /query /TN "task name" /S server_fqdn /U domain\user /P password | finstr Running
(附言:请注意,由于我的 Windows 操作系统是法语,因此我不确定“运行”状态。请根据您的语言进行检查)。
schtasks /END
将立即终止任务。
答案2
为什么不使用 PowerShell?WMIC 非常酷,但我不禁觉得 PowerShell 现在是此类事情的首选解决方案:
Invoke-Command -ComputerName $Server -ScriptBlock { Disable-ScheduledJob -Name $Task }