如何使用PowerShell禁用已克隆的计划任务

时间:2015-05-16 00:02:38

标签: scheduled-tasks powershell-v2.0

需要使用以下命令在Windows 2012中禁用clusterchduled任务 但是它没有禁用集群调度任务。

get-ClusteredScheduledTask -disable

Disable-ScheduledTask -TaskName

1 个答案:

答案 0 :(得分:0)

管道导致从get-ClusteredScheduledTasks返回的整个对象集被传递给Disable-ScheduledTask。使用-TaskName会导致Disable-ScheduledTask命令出错,因为管道告诉它"将此命令应用于这些对象,"但是,然后您立即尝试将命令应用于名为" schTest 123"的单个任务。 This article对命令管道提供了更深入的解释。

根据您尝试做的事情,有几种不同的解决方法:

1)如果您的目标是禁用当前安排的所有任务:

$tasks = get-ScheduledTasks | where { $_.State -eq "Ready" } # exclude any tasks that are already disabled so we don't accidentally re-enable them later
$tasks | Disable-ScheduledTask
# do your work
$tasks | Enable-ScheduledTask

OR

$tasks = get-ScheduledTasks | where { $_.State -eq "Ready" }
$tasks | foreach { Disable-ScheduledTask -TaskName $_.TaskName }
# do your work
$tasks | foreach { Enable-ScheduledTask -TaskName $_.TaskName }

这些在功能上是相同的,但第一个肯定是语义上更清洁。

2)如果您的目标是仅按名称禁用单个任务

Disable-ScheduledTask -TaskName $myTaskName
# do your work
Enable-ScheduledTask -TaskName $myTaskName

3)如果您想在禁用/启用

之前确定存在单个任务
$task = get-ClusteredScheduledTasks | where { $_.TaskName -eq $myTaskName }
if ( $task -eq $Null ) { throw ( "Could not find scheduled task " + $myTaskName ) }
Disable-ScheduledTask -TaskName $task.TaskName
# do work
Enable-ScheduledTask -TaskName $task.TaskName