Назад | Перейти на главную страницу

Отказано в доступе при создании запланированной задачи с помощью powershell и объекта com schedule.service

У меня есть сценарий PowerShell, который создает запланированную задачу с помощью вызова RegisterTask через объект com Schedule.Service.

По сути:

$ts = new-object -com Schedule.Service
$ts.Connect()
$rootfolder = $ts.GetFolder("\")
$taskXml = Get-Content "Task.xml"
$rootfolder.RegisterTask("\Maintenance", $taskXml, 6, "LOCAL SERVICE", $null, 5)

Это отлично работает на моем локальном компьютере (Windows 7, и я локальный администратор)

Когда я пробую это на машине, на которой он будет запущен, вызов RegisterTask завершается ошибкой ACCESS_DENIED.

Однако, если я запускаю командную строку от имени администратора, то powershell.exe -file myscript.sps1 он отлично работает и добавляет задачу.

Я убедился, что у пользователя, под которым он работает, есть разрешения на запись в папки задач в% windir% и% windir% / system32.

Пользователь находится в группе администраторов, что вызывает недоумение. Что еще мне нужно сделать, чтобы дать пользователю права на создание запланированных задач? Кажется, что просто добавить их в группу локальных администраторов недостаточно.

РЕДАКТИРОВАТЬ: Я вошел на сервер как пользователь, который будет запускать скрипт. Я могу успешно импортировать XML-файл в надстройку интерфейса планировщика заданий вручную.

Начиная с Powershell 4.0 вы можете использовать ScheduledTask модуль для создания запланированных задач без использования com-объекта и упрощения чтения и записи.

Пример:

 $A = New-ScheduledTaskAction -Execute "Taskmgr.exe"
 $T = New-ScheduledTaskTrigger -AtLogon
 $P = New-ScheduledTaskPrincipal "Laptop\Administrator"
 $S = New-ScheduledTaskSettingsSet
 $D = New-ScheduledTask -Action $A -Principal $P -Trigger $T -Settings $S
 Register-ScheduledTask T1 -InputObject $D

Первая команда использует New-ScheduledTaskAction командлет для присвоения переменной $A в исполняемый файл tskmgr.exe.

Вторая команда использует New-ScheduledTaskTrigger командлет для присвоения переменной $T к значению AtLogon.

Третья команда присваивает переменную $P руководителю запланированной задачи, Contoso\Administrator.

Четвертая команда использует New-ScheduledTaskSettingsSet командлет для присвоения переменной $S к объекту настройки задачи.

Пятая команда создает новую задачу и присваивает переменной $D к постановке задачи.

Шестая команда (гипотетически) выполняется позже. Он регистрирует новую запланированную задачу и определяет ее с помощью $D переменная.

Не забудьте запустить код как Administrator. Источник.

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