使用 powershell 和 com schedule.service 对象创建计划任务时访问被拒绝

使用 powershell 和 com schedule.service 对象创建计划任务时访问被拒绝

我有一个 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-ScheduledTaskActioncmdlet 将变量分配$Action给可执行文件tskmgr.exe

第二条命令使用New-ScheduledTaskTriggercmdlet 将变量分配$Trigger给值AtLogon

第三条命令将变量分配$Principal给计划任务的主体Contoso\Administrator

第四条命令使用New-ScheduledTaskSettingsSetcmdlet 将变量分配$Settings给任务设置对象。

第五条命令创建一个新任务并将变量分配$Task给任务定义。

第六条命令(假设)稍后运行。它注册新的计划任务并使用变量对其进行定义$Task

不要忘记以如下方式运行代码Administrator来源。

答案2

我最终放弃了,找不到使用注册任务来执行此操作的方法,但是使用schtasks允许我导入任务的 xml 文件而不会出现访问被拒绝错误。我还可以使用 schtasks 将任务导入远程计算机。

相关内容