我有一个 powershell 脚本,它通过 Schedule.Service com 对象调用 RegisterTask 来创建一个计划任务。
本质上:
$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 中的 Tasks 文件夹
该用户位于管理员组中,这令人困惑,我还需要做什么才能授予用户创建计划任务的权限? 似乎仅将其添加到本地管理员组是不够的。
编辑:我已以将运行脚本的用户身份登录到服务器。我可以成功地将 xml 文件手动导入任务计划程序 UI 插件。
答案1
自 Powershell 4.0 起,您可以使用ScheduledTask
模块创建计划任务,而无需使用 com 对象,并且更易于读写。
例子:
$Action = New-ScheduledTaskAction -Execute "Taskmgr.exe"
$Trigger = New-ScheduledTaskTrigger -AtLogon
$Principal = New-ScheduledTaskPrincipal "Laptop\Administrator"
$Settings = New-ScheduledTaskSettingsSet
$Task = New-ScheduledTask `
-Action $Action `
-Principal $Principal `
-Trigger $Trigger `
-Settings $Settings
Register-ScheduledTask -TaskName Task1 -InputObject $Task
第一个命令使用New-ScheduledTaskAction
cmdlet 将变量分配$Action
给可执行文件tskmgr.exe
。
第二条命令使用New-ScheduledTaskTrigger
cmdlet 将变量分配$Trigger
给值AtLogon
。
第三条命令将变量分配$Principal
给计划任务的主体Contoso\Administrator
。
第四条命令使用New-ScheduledTaskSettingsSet
cmdlet 将变量分配$Settings
给任务设置对象。
第五条命令创建一个新任务并将变量分配$Task
给任务定义。
第六条命令(假设)稍后运行。它注册新的计划任务并使用变量对其进行定义$Task
。
不要忘记以如下方式运行代码Administrator
。来源。
答案2
我最终放弃了,找不到使用注册任务来执行此操作的方法,但是使用schtasks
允许我导入任务的 xml 文件而不会出现访问被拒绝错误。我还可以使用 schtasks 将任务导入远程计算机。