Answers:
您可以使用基于COM的Task Scheduler脚本对象:
($TaskScheduler = New-Object -ComObject Schedule.Service).Connect("localhost")
$MyTask = $TaskScheduler.GetFolder('\').GetTask("My Task")
$MyTask.Enabled = $false
要再次启用任务:
$MyTask.Enabled = $true
仅当提升外壳程序并且您是服务器上的本地管理员时,以上操作才有效。您可以使用上述命令制作自己的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
}
如果您只是尝试停止所有任务,则停止Task Scheduler服务可能会更容易。ScheduledTasks模块直到Windows Server 2012才可用,因此管理任务并不像停止和启动服务那样简单:
Stop-Service Schedule
Start-Service Schedule
如果那对您不起作用,仍可以从PowerShell中使用schtasks.exe来管理单个任务:
schtasks.exe /CHANGE /TN "My Task" /DISABLE
schtasks.exe /CHANGE /TN "My Task" /ENABLE
太棒了!由于我处于2008/2012混合环境中,因此它比Get-ScheduledTask更好。我添加了几行来查询AD并针对一组计算机调用此命令。我的目标是禁用每次用户登录时打开“服务器管理器”的任务。全没了!
$C=Get-ADComputer -SearchBase 'OU=Computers,dc=domain,dc=com' -Filter * | foreach {$_.name}
Invoke-Command $C {
($TaskScheduler = New-Object -ComObject Schedule.Service).Connect("$C")
$TaskScheduler.GetFolder('\Microsoft\Windows\Folder').GetTasks(0) | % {$_.Enabled = $false}
}
看这个功能
Function Control-Tasks
{
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$true)][String]$FolderPath,
[Parameter(Mandatory=$true, ParameterSetname='EnableTask')][Switch]$Enable,
[Parameter(Mandatory=$true, ParameterSetname='DisableTask')][Switch]$Disable,
[Parameter()]$TaskScheduler,
[Parameter()][Switch]$Recursive
)
If ($TaskScheduler -eq $null) {
$TaskScheduler = New-Object -ComObject Schedule.Service
$TaskScheduler.Connect("localhost")
}
$curFolder = $TaskScheduler.GetFolder($FolderPath)
$curFolder.GetTasks(1) | ForEach-Object {
If ($Enable) {
$_.Enabled = $True
Write-Host "Enable $($_.Path)"
}
If ($Disable) {
$_.Enabled = $False
Write-Host "Disable $($_.Path)"
}
}
If ($Recursive) {
$curFolder.GetFolders(1) | ForEach-Object {
If ($Enable) {
Control-Tasks -FolderPath $_.Path -Enable -TaskScheduler $TaskScheduler -Recursive
}
If ($Disable) {
Control-Tasks -FolderPath $_.Path -Disable -TaskScheduler $TaskScheduler -Recursive
}
}
}
}
例如,您可以通过调用禁用文件夹“ \ mysql”下的所有任务
Control-Tasks -FolderPath "\mysql" -Disable -Recursive
此代码段来自如何通过PowerShell批量禁用/启用计划的任务,您可以在此处下载完整的示例档案。
这对我有用
Get-ScheduledTask -TaskName "TestJob" | Stop-ScheduledTask
at.exe
。(例如:)AT 09:00 /every:SUNDAY shutdown.exe /r /f /d p:4:1 /c "Reboot via SchTask (AT Job)"
。您将得到的错误是0x80041327;该任务的属性与Windows的