トリガを削除するPowerShellコマンドレットは表示されませんが、Schedule.Service COMオブジェクトを通じて実行できます。次の例では、MyTaskという名前のタスクから最初のトリガーを削除します。
開始時刻やその他の基準に基づいて削除する特定のトリガを見つけるために、トリガを調べるためにループを追加する必要があります。
注:トリガ列挙は一基づいて、ゼロベースではないので、最初のトリガを削除するには、このくらいのためChanging Scheduled Tasks with PowerShellから$definition.Triggers.Remove(1)
クレジットです。特に「AtStartup」トリガされているすべてのトリガーを削除するには
$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:
セクションを交換。トリガーが後退すると、それ以降のトリガーの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
ループ内に小さなエラーがあり、すべてのスタートアップタイプのトリガが削除されていましたが、複数のスタートアップタイプのトリガがある場合は、それらのうちの1つだけを削除していました。 $ 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