gpt4 book ai didi

powershell - 如何从计划任务中删除触发器

转载 作者:行者123 更新时间:2023-12-03 20:57:24 26 4
gpt4 key购买 nike

我在 PowerShell 中使用 Task Scheduler cmdlet 为 Perfmon 数据收集器集的计划任务配置触发器。
我正在使用以下内容来修改计划任务并在服务器启动时启动数据收集器集:

$trigger = New-ScheduledTaskTrigger -AtStartup
Set-ScheduledTask -TaskPath '\Microsoft\Windows\PLA\' -Taskname $TemplateName -Trigger $trigger

但我想知道是否有办法从计划任务配置中删除此触发器。我不想禁用计划任务,只想从计划任务中删除此触发器。

PowerShell cmdlet 似乎没有办法做到这一点。
任何帮助将不胜感激。

最佳答案

似乎没有用于删除触发器的 PowerShell cmdlet,但您可以通过 Schedule.Service COM 对象来完成。以下示例将从名为 MyTask 的任务中删除第一个触发器。

您可能需要添加一个循环来检查触发器,以便根据开始时间或其他条件找到要删除的特定触发器。

注:触发器枚举是从一开始的,而不是从零开始的,所以要删除第一个触发器,它是 $definition.Triggers.Remove(1)
归功于 Changing Scheduled Tasks with PowerShell这其中的大部分。

$taskName = "MyTask"
$triggerToDelete = 1

# connect to Task Scheduler:
$service = New-Object -ComObject Schedule.Service
$service.Connect($env:COMPUTERNAME)

# pick a specific task in a container:
$folder = $service.GetFolder('\')
$task = $folder.GetTask($taskName)

# get task definition and change it:
$definition = $task.Definition
$definition.Triggers.Remove($triggerToDelete)

# write back changed task definition:
# 4 = Update
$folder.RegisterTaskDefinition($task.Name, $definition, 4, $null, $null, $null)

要专门删除所有属于“AtStartup”触发器的触发器,请替换 # get task definition and change it:以下部分。请注意,它正在向后循环触发器,因为如果删除一个触发器,任何后续触发器的 ID 都会更改。
# get task definition and change it:
$definition = $task.Definition

$numTriggers = $definition.Triggers.Count

# loop backwards through the triggers and
# remove any that are "Startup" (Type = 8)
for($triggerId=$numTriggers; $triggerId -gt 0; $triggerId--){
if($definition.Triggers.Item($triggerId).Type -eq "8"){
$definition.Triggers.Remove($triggerId)
}
}

我确信这可以通过管道到 where 用更少的行来完成。条款,但我总是需要更长的时间才能做到这一点,所以我只是遍历事情,只要它的影响最小。

关于powershell - 如何从计划任务中删除触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37864480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com