Dav*_*eny 8 automation powershell scheduled-task windows-server-2008-r2
我有一个在 Windows Server 2008 R2 上运行的 Web 应用程序,它有大量的计划任务,负责处理所有后端工作。当我进行涉及数据库的软件部署时,我需要禁用所有计划任务。目前,我有一个很长的清单,我需要手动逐步完成,在执行过程中禁用每个计划任务 - 当然,这是使用 Powershell 实现自动化的成熟工作。
不幸的是,Powershell 文档似乎对如何禁用现有的计划任务(当然,在成功完成发布后重新启用它)的内容相当含糊。我可以获得就绪、正在运行或已禁用任务的列表,但接下来怎么办?
Mat*_*sen 14
您可以使用基于 COM 的任务计划程序脚本对象:
($TaskScheduler = New-Object -ComObject Schedule.Service).Connect("localhost")
$MyTask = $TaskScheduler.GetFolder('\').GetTask("My Task")
$MyTask.Enabled = $false
Run Code Online (Sandbox Code Playgroud)
再次启用任务:
$MyTask.Enabled = $true
Run Code Online (Sandbox Code Playgroud)
以上仅当 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
}
Run Code Online (Sandbox Code Playgroud)
如果您只是想停止所有任务,则停止任务计划程序服务可能会更容易。ScheduledTasks 模块直到 Windows Server 2012 才可用,因此管理任务不像停止和启动服务那么简单:
Stop-Service Schedule
Start-Service Schedule
Run Code Online (Sandbox Code Playgroud)
如果这对您不起作用,仍然可以从 PowerShell 使用 schtasks.exe 来管理单个任务:
schtasks.exe /CHANGE /TN "My Task" /DISABLE
schtasks.exe /CHANGE /TN "My Task" /ENABLE
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26755 次 |
最近记录: |