如何重命名 Windows Server 2008 R2 上的任务计划中的任务

Mar*_*ark 136 scheduled-task task task-scheduler windows-server-2008-r2

我在 Windows 2008 R2 上的任务计划程序中有一些任务。我以管理员身份创建它们,并以管理员身份登录。我没有简单的方法来重命名任务。我能做的唯一方法是将任务配置导出到 XML 文件并重新导入到新任务,在那里更改名称,然后删除旧任务。有更容易的方法吗?

Wes*_*ley 150

恭喜!您遇到了困扰许多 Windows 用户/管理员的问题。不可以,除了导出、重命名和再次导入外,您不能重命名任务。是的,这很愚蠢。也许有进取心的脚本编写者可以创建一个简单的 PowerShell 脚本来自动执行此操作,但在此之前,您只能执行导出/导入两步操作。对不起。=(

(您也无法在创建任务文件夹后对其进行重命名。)

  • Grrrrr,啊啊啊啊!我想知道这个愚蠢的限制到底是怎么产生的?重命名几乎不是用户很少想做的“异国情调”任务。这很令人费解。 (26认同)
  • @DoctorJones 存在该限制是因为更改任务名称会更改任务名称的哈希值,这会更改添加到任务安全令牌的安全标识符(SID),从而破坏分配给该任务的权限。(请参阅https://serverfault.com/a/1067045/4822) (4认同)

小智 10

不是最好的方法,但可以挽救生命。

任务C:\Windows\System32\Tasks以 XML 格式存储,可使用schtasks.exe. 正如 Weasly 所说,重命名文件不起作用,但创建/删除会。也就是说,您需要运行用户密码(您拥有)

与 Weasly 的建议相比,它只是跳过了导出阶段。

  1. 使用第一个作为模板创建第二个任务
  2. 删除原来的

在 Tasks 文件夹中使用srcnamedstname管理shell:

C:\Windows\System32\Tasks>schtasks /Create /tn dstname /xml srcname /ru [running username] /rp [password]
SUCCESS: The scheduled task "dstname" has successfully been created.

C:\Windows\System32\Tasks>schtasks /delete /tn srcname /f
SUCCESS: The scheduled task "srcname" was successfully deleted.
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 只需编写一点脚本,您就可以毫不费力地重命名大量任务
  • 如果需要,您应该能够从 XML 中提取原始 RU(在 node 中Task/Principals/Principal/UserId
  • 如果您希望 schtasks 要求输入密码,只需删除/rp [password]部分


Joh*_*Pro 5

不幸的是没有。现在就是这样做的。我相信这是出于安全目的,因此在实际设置和启用设置任务时无法修改它们。

  • 如果我已经以管理员身份登录,因为我必须创建任务,这如何成为“安全功能”? (5认同)

Ian*_*oyd 5

简洁版本

您无法重命名计划任务,因为这会更改SID任务的运行方式。

该名称构成任务运行时用户的安全标识符(SID)。重命名任务会破坏任何现有权限。

长版

很多人抱怨无法重命名计划任务。这是有原因的。

计划任务以某个用户身份运行,例如:

  • Local Service (好的)
  • Network Service (好的)
  • System (坏的)
  • 在 Active Directory 中手动创建的一些进程帐户(不好)

这意味着如果您的任务需要访问某些资源,您需要授予该用户对这些资源的访问权限。

我们真正希望它授予对该任务的访问权限;该计划任务本身应该具有权限 - 而不是任务运行的用户。这称为任务安全强化

任务强化

当计划任务运行时,任务计划程序会在运行该任务的用户的令牌中添加一个附加的安全标识符(SID)。例如:

  • 名称:( NT TASK\[Task name] 例如“NT TASK\敏捷的棕色狐狸跳过了懒狗”)

  • 组 sid: S-1-5-87-xxxxx(例如 S-1-5-87-2312335432-65297056-3549082870-2589977271-250352331)

该组的sid是根据定时任务名称的hash动态生成的。组 sid 是权限的子级S-1-5-87。SID 的相对 ID 87来自以下中定义的常量winnt.h

SECURITY_TASK_ID_BASE_RID                 (0x00000057L)
Run Code Online (Sandbox Code Playgroud)

您可以在启动进程的安全令牌中看到这个额外的组 SID:

在此输入图像描述

生成任务 SID

您可以手动散列任务名称,或者通过运行命令行工具查看该任务的假设 sid 是什么:

>schtasks /showsid /TN "The quick brown fox jumped over the lazy dog"

SUCCESS: The SID "S-1-5-87-2312335432-65297056-3549082870-2589977271-250352331" 
for the user name "The quick brown fox jumped over the lazy dog" 
has been computed successfully.
Run Code Online (Sandbox Code Playgroud)

您可以使用 icacls 向该组授予权限:

>icacls yellow.png /grant "*S-1-5-87-2312335432-65297056-3549082870-2589977271-250352331:(M)"
Run Code Online (Sandbox Code Playgroud)

如果计划任务位于文件夹中,则还需要包含该文件夹:

>schtasks /showsid /TN "Stackoverflow\Answer Question About Security"

SUCCESS: The SID "S-1-5-87-1865438416-972601292-3915696002-2261943663-3756584440" 
for the user name "Stackoverflow-Answer Question About Security" 
has been computed successfully.
Run Code Online (Sandbox Code Playgroud)

并且,您可以再次授予该对象的 SID 权限:

>icacls yellow.png /grant "*S-1-5-87-1865438416-972601292-3915696002-2261943663-3756584440:(M)"

processed file: yellow.png
Successfully processed 1 files; Failed processing 0 files
Run Code Online (Sandbox Code Playgroud)

您可以看到该组已被授予权限(在本例中为修改权限):

在此输入图像描述

好处是:

  • 此虚拟帐户系统(也由具有NT SERVICE组的服务和 IIS 应用程序身份使用)
  • 以及特殊账户Local ServiceNetwork Service账户

问题是这些帐户没有密码——任何用户都不允许以它们的身份登录。这意味着您不必担心密码泄露。

最重要的是,当您使用NT TASKNT SERVICEIIS APPPOOL虚拟帐户分配权限时:无法模拟该用户。从任何意义上来说,它都不是用户。这些是额外的安全边界,这是一件非常好的事情。

所以你当然不能重命名它

如果您一直在注意,您现在就会明白为什么不能重命名计划任务,或将其移动到另一个文件夹:它会更改任务名称的哈希值,更改任务的NT TASKSID,并使授予的任何权限无效。