Как изменить триггеры задач с помощью PowerShell? - PullRequest
0 голосов
/ 19 июня 2020

Приведенный ниже сценарий удаляет триггеры задачи для каждой задачи, ТОЛЬКО если задачи находятся в папке. Однако мои задачи находятся в ГЛАВНОМ ОКНЕ в планировщике задач. Когда вы нажимаете на библиотеку планировщика заданий, они прямо здесь. Их нет ни в одной папке. Однако $ folder = $ service.GetFolder ('\') не работает. Пробовал без бэкла sh и без кавычек, все равно не работает. Что происходит?

$service = New-Object -ComObject Schedule.Service
$service.Connect($env:COMPUTERNAME)

$folder = $service.GetFolder('\')

$tasks = $folder.gettasks(0)

foreach ($t in $tasks)
{
$definition = $t.Definition

$triggersCount = $definition.Triggers.Count

for($id=$triggersCount; $id -gt 0; $id--){
  $definition.Triggers.Remove($id)   
}

$folder.RegisterTaskDefinition($t.Name, $definition, 4, $null, $null, $null)
}

Ответы [ 2 ]

3 голосов
/ 20 июня 2020

Get-ScheduledTask -TaskPath "\" может отображать все задачи, но в модуле нет очевидных команд или методов для удаления триггеров. Я не видел пути, и этот ответ , кажется, подтверждает это.

Из вашего вопроса неясно, вызывает ли $folder = $service.GetFolder('\') ошибку или его последующий вызов $tasks = $folder.gettasks(0). В этом ответе я предполагаю, что это последнее, только потому, что именно здесь я, похоже, столкнулся с проблемами в моей собственной среде.

Я думаю, что это может быть комбинация разрешений и / или скрытого статуса задача. Во-первых, можете ли вы попробовать работать с повышенными правами?

Причина, по-моему, это после $folder = $service.GetFolder('\') Я смог получить список задач в папке root, однако в списке было только 2 из 9. Когда я работал с повышенными правами, я получил 6 из 9.

Я даже попробовал старый модуль «TaskScheduler» пакета PowerShell, который внутри использует почти тот же код COM, и получил те же результаты.

Теперь я, наконец, смог получить подход COM для отображения всех 9 в сеансе с повышенными привилегиями, перевернув аргумент GetTasks на 1:

$tasks = $folder.gettasks(1)

Я считаю, что этот аргумент означает показывать или не показывать скрытые задачи , однако принимает только [Int]. Итак, 0 = ложь, 1 = правда. Я подтвердил это, посмотрев на код в старом модуле «TaskScheduler». Включение логического значения, например $ true, в аргумент не сработает, подойдет только [Int].

Примечание. В левом нижнем углу на первой вкладке окна есть скрытый флажок. Диалог свойств задачи. В некоторых случаях корреляция совпадает с тем, что я обнаружил в консоли.

В любом случае попробуйте эти 2 вещи:

  1. Запуск с повышенными правами.
  2. Измените аргумент на 1

Дайте мне знать, как это получается. Спасибо.

0 голосов
/ 20 июня 2020

Вам даже не нужно беспокоиться об использовании функции GetFolder. Вы можете просто использовать командлет Get-ScheduledTask и передать соответствующие параметры для получения сведений о запланированной задаче.

Фрагмент кода выглядит примерно так (поскольку вы пытаетесь сделать это для удаленного сервера, вы необходимо передать дополнительный параметр -CimSession в командлет):

$tasks = Get-ScheduledTask -CimSession $Server -TaskPath "\" | Get-ScheduledTaskInfo

Попробуйте и дайте мне знать, поможет ли это!

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