我有一个计划任务,希望能够以在本地计算机上没有管理权限的普通用户身份运行/触发该任务。该任务本身是使用以下帐户创建的NT AUTHORITY\SYSTEM
当我使用 PowerShell 运行任务时,它会给我Start-ScheduledTask : Access is denied
我目前所做的
设置Allow
为List folder contents
并Read
开启
C:\Windows\System32\Tasks
设置Allow
为Read & execute
并Read
开启
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