У меня есть сценарий 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 для импорта задачи на удаленный компьютер.