Используйте Powershell, чтобы добавить свойство «Разблокировка на рабочей станции» в запланированную задачу. - PullRequest
1 голос
/ 06 мая 2020

У меня есть задача с двумя триггерами. Первый запускается при входе в систему любого пользователя и запускается каждые 3 минуты неограниченно долго. Второй запускается при "UNlock на рабочей станции". Я также хочу запускать этот второй триггер каждые 10 минут и бесконечно после срабатывания. У меня есть следующая часть, которая соответствует «Разблокировке на рабочей станции», но как мне все вместе собрать?

$Task = Get-ScheduledTask -TaskName "Task"
$Task.Triggers.Repetition.Duration = "" 
$Task.Triggers.Repetition.Interval = "PT10M"

    $stateChangeTrigger = Get-CimClass `
         -Namespace ROOT\Microsoft\Windows\TaskScheduler `
         -ClassName MSFT_TaskSessionStateChangeTrigger

    $onUnlockTrigger = New-CimInstance `
        -CimClass $stateChangeTrigger `
        -Property @{
        StateChange = 8  # TASK_SESSION_STATE_CHANGE_TYPE.TASK_SESSION_UNLOCK (taskschd.h)
    } `
       -ClientOnly

1 Ответ

2 голосов
/ 07 мая 2020

Вы можете сделать это следующим образом (дважды обновив задачу):

# 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

Соответствующие ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...