如何修改Windows 10中的计划任务的权限?

如何修改Windows 10中的计划任务的权限?

我有一个计划任务,希望能够以在本地计算机上没有管理权限的普通用户身份运行/触发该任务。该任务本身是使用以下帐户创建的NT AUTHORITY\SYSTEM

当我使用 PowerShell 运行任务时,它会给我Start-ScheduledTask : Access is denied

我目前所做的

设置AllowList folder contentsRead开启 C:\Windows\System32\Tasks

设置AllowRead & executeRead开启 C:\Windows\System32\Tasks\MyTask

我如何修改权限以便Authenticated Users能够运行/触发 MyTask?

答案1

有一种方法可以具体完成原始问题所要求的操作: 修改计划任务的权限以允许经过身份验证的用户“运行/触发”该计划任务。

据我所知,计划任务的权限问题适用于 Windows OS 2016/Windows 10 及更高版本。在此之前,经过身份验证的用户可以通过获得对 C:\Windows\System32\Tasks 文件夹的适当权限来运行计划任务。

如今,同样的问题可以通过以下方法解决修改特定计划任务的 ACL。这些 ACL 存储在注册表中。当然,有多种方法可以修改这些 ACL。此特定方法使用 Powershell 授予经过身份验证的用户查看和执行命名计划任务的能力。(您也可以对其进行调整以适用于特定用户 SID - 但这是另一个问题。)

我已经在我的终端上测试过了并且它有效。

在 Powershell 中运行以下代码 -以管理员身份运行否则它很可能不起作用。请确保首先将 $TaskPath 和 $TaskName 的值更新为与目标计划任务相匹配的值。

####################################

#IMPORTANT:  Run Powershell As Administrator

####################################

$TaskName = "(the name of the Scheduled Task you want to run)"
$TaskPath = "\" #Scheduled Tasks at the base level use this path. Anything deeper you have to add in the folder path.
$Scheduler = New-Object -ComObject "Schedule.Service"
$Scheduler.Connect()
$GetTask = $Scheduler.GetFolder($TaskPath).GetTask($TaskName)
$GetSecurityDescriptor = $GetTask.GetSecurityDescriptor(0xF)
if ($GetSecurityDescriptor -notmatch 'A;;0x1200a9;;;AU') {
    $GetSecurityDescriptor = $GetSecurityDescriptor + '(A;;GRGX;;;AU)'
    $GetTask.SetSecurityDescriptor($GetSecurityDescriptor, 0)
}

本文的信息主要来源于以下网站: https://www.osdeploy.com/blog/2021/scheduled-tasks/task-permissions

相关内容