2016-06-16 5 views
3

PowerShell의 작업 스케줄러 cmdlet을 사용하여 Perfmon Data Collector 집합의 예약 된 작업에 대한 트리거를 구성하고 있습니다. 나는 서버가 시작될 때 데이터 수집기 ​​세트를 예약 된 작업을 수정하고 시작하려면 다음을 사용하고 있습니다 :예약 된 작업에서 트리거를 제거하는 방법

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

하지만 예약 된 작업의 설정에서이 트리거를 제거하는 방법이 있는지 알고 싶습니다. 예약 된 작업을 사용하지 않으려는 경우 예약 된 작업에서이 트리거를 제거하려고합니다.

PowerShell cmdlet에서이 작업을 수행 할 수있는 것처럼 보이지 않습니다. 도움이 될 것입니다.

답변

4

트리거를 삭제하기위한 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 절에 배관하여 적은 수의 라인을 함께 할 수있는 확신하지만, 항상 얻기 위해 더 이상 저를 소요 한이 최소한의 것 무언가의 사물을 통해 바로 그래서 나는 단지 루프 충격.

+0

예. 정상적으로 작동합니다. 모든 도움을 주셔서 대단히 감사합니다. 정말 감사드립니다! – rapturesque

+0

루프에서 모든 시작 유형 트리거를 제거하는 작은 오류가 발견되었지만 여러 시작 유형 트리거가있는 경우 모든 트리거 유형 중 하나만 제거하는 것이 었습니다. $ definition.Triggers.Remove ($ triggerId)를 실행하면 해당 트리거가 제거 된 후 트리거 수가 1 씩 감소하고 트리거의 ID도 변경되어 1 씩 감소합니다. 이 때문에 루프 방금 제거한 트리거를 바로 확인하지 않습니다. – rapturesque

+1

수정하려면 다음과 같이 수정하십시오. 'for ($ triggerId = 1; $ triggerId -le $ definition.Triggers.Count; $ triggerId ++) { if ($ definition.Triggers.Item ($ triggerId). 유형 -eq "8") { $ definition.Triggers.Remove ($ triggerId); $ triggerId- = 1; } } ' – rapturesque

관련 문제