Windows-Server-2008-R2

如何使用 Powershell 禁用計劃任務?

  • December 3, 2019

我有一個在 Windows Server 2008 R2 上執行的 Web 應用程序,它有大量的計劃任務來處理所有後端的事情。當我進行涉及數據庫的軟體部署時,我需要禁用所有計劃任務。目前,我有一個很長的清單,我需要手動逐步完成,並在執行過程中禁用每個計劃任務 - 當然,這對於使用 Powershell 進行自動化來說已經成熟。

不幸的是,Powershell 文件似乎對如何禁用現有的計劃任務(當然,一旦成功完成發布就重新啟用它)相當含糊。我可以獲得準備好的、正在執行或禁用的任務的列表,但接下來呢?

您可以使用基於 COM 的任務計劃程序腳本對象

($TaskScheduler = New-Object -ComObject Schedule.Service).Connect("localhost")
$MyTask = $TaskScheduler.GetFolder('\').GetTask("My Task")
$MyTask.Enabled = $false

再次啟用任務:

$MyTask.Enabled = $true

僅當 shell 被提升並且您是伺服器上的本地管理員時,上述內容才有效。您可以使用上述內容製作自己的 cmdlet:

function Disable-ScheduledTask
{
   param([string]$TaskName,
         [string]$ComputerName = "localhost"
        )

   $TaskScheduler = New-Object -ComObject Schedule.Service
   $TaskScheduler.Connect($ComputerName)
   $TaskRootFolder = $TaskScheduler.GetFolder('\')
   $Task = $TaskRootFolder.GetTask($TaskName)
   if(-not $?)
   {
       Write-Error "Task $TaskName not found on $ComputerName"
       return
   }
   $Task.Enabled = $False
}

引用自:https://serverfault.com/questions/601933