使用 Powershell 将属性"On Workstation Unlock"添加到计划任务



我有一个带有两个触发器的任务。第一个从任何用户的登录开始并且无限期地每3分钟运行一次。第二个在"工作站解锁"时启动。我也想运行这个每10分钟第二次触发,并在触发后无限期触发。我有以下部分对应于"工作站上解锁",但我如何获得所有东西都在一起?

$Task = Get-ScheduledTask -TaskName "Task"
$Task.Triggers.Repetition.Duration = "" 
$Task.Triggers.Repetition.Interval = "PT10M"
$stateChangeTrigger = Get-CimClass `
-Namespace ROOTMicrosoftWindowsTaskScheduler `
-ClassName MSFT_TaskSessionStateChangeTrigger
$onUnlockTrigger = New-CimInstance `
-CimClass $stateChangeTrigger `
-Property @{
StateChange = 8  # TASK_SESSION_STATE_CHANGE_TYPE.TASK_SESSION_UNLOCK (taskschd.h)
} `
-ClientOnly

您可以通过以下方式(更新任务两次(执行此操作:

# Create the trigger class for $T2
$StateChangeTrigger = Get-CimClass `
-Namespace Root/Microsoft/Windows/TaskScheduler `
-ClassName MSFT_TaskSessionStateChangeTrigger
# Define triggers (the type)
$T1 = New-ScheduledTaskTrigger -AtLogOn
$T2 = New-CimInstance `
-CimClass $StateChangeTrigger `
-Property @{StateChange = 8} `
-ClientOnly
# Update the task; Get its new settings
Set-ScheduledTask 'Task' -Trigger $T1,$T2
$Task = Get-ScheduledTask -TaskName 'Task'
# Set triggers options
$Task.Triggers[0].Repetition.Interval = 'PT3M'
$Task.Triggers[1].Repetition.Interval = 'PT10M'
# Final task update
$Task | Set-ScheduledTask

@Jarrad在这里也有一个很好的例子,说明如何使用COM方法修改针对您情况的触发器。

#更新

通过为重复模式创建适当的CIM实例,可以在不修改任务两次的情况下完成上述操作:

# Create the trigger class for $T2
$StateChangeTrigger = Get-CimClass `
-Namespace Root/Microsoft/Windows/TaskScheduler `
-ClassName MSFT_TaskSessionStateChangeTrigger
# Create the repetition pattern class
$RepetitionPattern = Get-CimClass `
-Namespace Root/Microsoft/Windows/TaskScheduler `
-ClassName MSFT_TaskRepetitionPattern
# Define a new repetition pattern
$R = New-CimInstance `
-CimClass $RepetitionPattern `
-Property @{Interval = 'PT3M'} `
-ClientOnly
# Define triggers
$T1 = New-ScheduledTaskTrigger -AtLogOn
$T1.Repetition = $R
$T2 = New-CimInstance `
-CimClass $StateChangeTrigger `
-Property @{StateChange = 8;
Repetition = $R} `
-ClientOnly
$T2.Repetition.Interval = 'PT10M'
# Update the task and done
Set-ScheduledTask 'Task' -Trigger $T1,$T2

相应的参考链接:

  • 新建日程任务触发器
  • 设置ScheduledTask
  • 注册ScheduledTask(创建一个新任务,而不是修改现有的(

最新更新