트리거를 삭제하기위한 PowerShell cmdlet이 나타나지 않지만 Schedule.Service COM 개체를 통해 수행 할 수 있습니다. 다음 예제는 MyTask라는 태스크에서 첫 번째 트리거를 제거합니다.
시작 시간이나 다른 기준에 따라 제거 할 특정 트리거를 찾으려면 루프를 추가하여 트리거를 검사해야 할 수 있습니다.
참고 : 트리거 열거가 하나의 기준으로, 제로 기반이 아닌, 그래서 첫 번째 트리거를 제거 할이의 대부분을 Changing Scheduled Tasks with PowerShell-$definition.Triggers.Remove(1)
신용이다.
$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)
구체적으로 다음과
# get task definition and change it:
부분을 대체, "AtStartup"트리거 모든 트리거를 삭제합니다. 하나가 제거되면 다음 트리거의 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
절에 배관하여 적은 수의 라인을 함께 할 수있는 확신하지만, 항상 얻기 위해 더 이상 저를 소요 한이 최소한의 것 무언가의 사물을 통해 바로 그래서 나는 단지 루프 충격.
예. 정상적으로 작동합니다. 모든 도움을 주셔서 대단히 감사합니다. 정말 감사드립니다! – rapturesque
루프에서 모든 시작 유형 트리거를 제거하는 작은 오류가 발견되었지만 여러 시작 유형 트리거가있는 경우 모든 트리거 유형 중 하나만 제거하는 것이 었습니다. $ definition.Triggers.Remove ($ triggerId)를 실행하면 해당 트리거가 제거 된 후 트리거 수가 1 씩 감소하고 트리거의 ID도 변경되어 1 씩 감소합니다. 이 때문에 루프 방금 제거한 트리거를 바로 확인하지 않습니다. – rapturesque
수정하려면 다음과 같이 수정하십시오. 'for ($ triggerId = 1; $ triggerId -le $ definition.Triggers.Count; $ triggerId ++) { if ($ definition.Triggers.Item ($ triggerId). 유형 -eq "8") { $ definition.Triggers.Remove ($ triggerId); $ triggerId- = 1; } } ' – rapturesque