如何更改 Windows 中的默认计划任务进程优先级
How to change default scheduled task process priority in Windows
我已经检查了一段时间了。我们有一个创建计划任务的脚本,似乎正如网上许多地方所描述的那样,这个进程及其后代收到的任务优先级是 7:BelowNormal
现在这会在我们的测试环境中引起许多我想避免的问题
这里的问题是我是否可以创建一个 GPO 来覆盖 Windows' 默认的计划任务优先级,以便所有新的计划任务将获得优先级 X(在我的情况下 X 是 'Normal')
我知道有一个选项可以在创建计划任务时设置优先级,但我想避免这种情况,这样每个新任务都会有一个正确的默认优先级,而不是低于正常的优先级
提前致谢
您可以通过添加设置选项来编辑现有任务
$currentTask = Get-ScheduledTask -TaskName $taskName
$settings = New-ScheduledTaskSettingsSet
$settings.Priority = 4
Set-ScheduledTask -TaskName $taskName -Trigger $currentTask.Triggers -Action $currentTask.Actions -Settings $settings -User "user" -Password "pass"
不使用 powershell 的另一种方法:
从 GUI 导出任务:在任务计划程序中,right-click 任务和 select "Export…" 并将导出的任务保存在文件中
更改优先级
2.1 在文本编辑器(如记事本)中打开文件。这是定义任务的 XML。每个操作都会有一个部分,其中包含 <Settings>
,其中包含 <Priority>
元素。
2.2 更改值。 “低于正常”的默认值为 7。您可以使用 6、5 或 4 来表示“正常”优先级。您通常不想超出“正常”范围。 6 可能适合你。
2.3 保存文件(例如"c:\mytask.xml")
使用命令导入任务line/schtasks:
schtasks /DELETE /tn "\TASKSCHEDULER-FOLDER-PATH\TASK-IMPORT-NAME"
(您需要先删除现有任务,然后使用 schtasks 从命令行创建一个新任务)
schtasks /create /xml "c:\mytask.xml" /tn "\TASKSCHEDULER-FOLDER-PATH\TASK-IMPORT-NAME"
我有 220 台机器来做那个,所以我就这样做了。由于所有机器都有相同的配置,我可以将相同的 XML 文件复制到所有机器并根据 XML 重新创建计划任务。
请参阅有关不同优先级的更多详细信息 here. This answer was based on this 文章。
很遗憾,您无法更改默认优先级。但您可以使用 Set-ScheduledTask
修改现有任务。
$task = Get-ScheduledTask -TaskName '...' // Your task's name
$settings = $task.Settings
$settings.Priority = 4
// For possible values see https://docs.microsoft.com/en-us/windows/win32/taskschd/tasksettings-priority#remarks
Set-ScheduledTask -TaskName $taskName -Settings $settings
与 Alex Portnoy 的回答不同,这会保留其他设置,例如 WakeToRun
。
我已经检查了一段时间了。我们有一个创建计划任务的脚本,似乎正如网上许多地方所描述的那样,这个进程及其后代收到的任务优先级是 7:BelowNormal
现在这会在我们的测试环境中引起许多我想避免的问题
这里的问题是我是否可以创建一个 GPO 来覆盖 Windows' 默认的计划任务优先级,以便所有新的计划任务将获得优先级 X(在我的情况下 X 是 'Normal')
我知道有一个选项可以在创建计划任务时设置优先级,但我想避免这种情况,这样每个新任务都会有一个正确的默认优先级,而不是低于正常的优先级
提前致谢
您可以通过添加设置选项来编辑现有任务
$currentTask = Get-ScheduledTask -TaskName $taskName
$settings = New-ScheduledTaskSettingsSet
$settings.Priority = 4
Set-ScheduledTask -TaskName $taskName -Trigger $currentTask.Triggers -Action $currentTask.Actions -Settings $settings -User "user" -Password "pass"
不使用 powershell 的另一种方法:
从 GUI 导出任务:在任务计划程序中,right-click 任务和 select "Export…" 并将导出的任务保存在文件中
更改优先级
2.1 在文本编辑器(如记事本)中打开文件。这是定义任务的 XML。每个操作都会有一个部分,其中包含<Settings>
,其中包含<Priority>
元素。
2.2 更改值。 “低于正常”的默认值为 7。您可以使用 6、5 或 4 来表示“正常”优先级。您通常不想超出“正常”范围。 6 可能适合你。
2.3 保存文件(例如"c:\mytask.xml")使用命令导入任务line/schtasks:
schtasks /DELETE /tn "\TASKSCHEDULER-FOLDER-PATH\TASK-IMPORT-NAME"
(您需要先删除现有任务,然后使用 schtasks 从命令行创建一个新任务)
schtasks /create /xml "c:\mytask.xml" /tn "\TASKSCHEDULER-FOLDER-PATH\TASK-IMPORT-NAME"
我有 220 台机器来做那个,所以我就这样做了。由于所有机器都有相同的配置,我可以将相同的 XML 文件复制到所有机器并根据 XML 重新创建计划任务。 请参阅有关不同优先级的更多详细信息 here. This answer was based on this 文章。
很遗憾,您无法更改默认优先级。但您可以使用 Set-ScheduledTask
修改现有任务。
$task = Get-ScheduledTask -TaskName '...' // Your task's name
$settings = $task.Settings
$settings.Priority = 4
// For possible values see https://docs.microsoft.com/en-us/windows/win32/taskschd/tasksettings-priority#remarks
Set-ScheduledTask -TaskName $taskName -Settings $settings
与 Alex Portnoy 的回答不同,这会保留其他设置,例如 WakeToRun
。