当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何创建 PowerShell 计划任务

作者:精品下载站 日期:2024-12-14 03:44:51 浏览:14 分类:玩电脑

如何创建 PowerShell 计划任务


PowerShell 脚本是自动执行日常任务或生成每周报告的好方法。但是如何为 PowerShell 脚本制定计划任务呢?我们可以使用任务计划程序运行 PowerShell 脚本或在 PowerShell 中创建任务来执行此操作。

计划任务的优点是您可以设置并忘记它们。它们将在后台运行,并更新您的系统,或生成您必须手动执行的报告。

在本文中,我们将了解如何使用任务计划程序运行 PowerShell 脚本以及如何在 PowerShell 中创建计划任务。

使用任务计划程序运行 PowerShell 脚本

我们要考虑的第一个选项是使用 Windows 中的任务计划程序来运行 PowerShell 脚本。 Windows任务计划程序起源于Windows 95!是在 Windows 中安排任务的好方法。

要使用任务计划程序运行 PowerShell 脚本,我们不能简单地选择要计划的 PowerShell 文件。我们要做的是运行“程序”PowerShell 并使用参数选择我们要运行的文件。

所需时间:2 分钟

  1. 打开任务计划程序

    单击开始并输入“任务计划程序”将其打开。或者在“开始”菜单中的“Windows 管理工具”(或使用 Win 11 时的“Windows 工具”)下选择它

  2. 创建新的基本任务

    点击右侧操作栏中的创建基本任务...,并为您的任务命名。
    (我建议在文件夹中组织您的任务,在左侧创建它们首先)

    [玩转系统] 如何创建 PowerShell 计划任务

  3. 安排任务

    触发器决定任务何时执行。 选择一个触发器,例如每周,然后单击下一步来配置任务需要执行的具体时间。

  4. 设置操作

    重要的部分来了,对于该操作,我们将启动一个程序

    [玩转系统] 如何创建 PowerShell 计划任务

  5. 启动程序 - PowerShell

    我们要运行的程序是PowerShell。只需在“程序/脚本”字段中输入 PowerShell (请参阅步骤 6 中的屏幕截图),您无需找到可执行文件的确切路径。

  6. 添加参数

    在参数字段中,我们将添加参数 -File 和 PowerShell 脚本的路径。添加 PowerShell 开关 -NoProfile 并将 -ExecutionPolicy 设置为 ByPass 也是一个好主意。

    如果您的脚本需要任何参数,那么您可以可以在路径后面添加它们(例如 -Output 参数):

    -NoProfile -ExecutionPolicy Bypass -File "C: \scripts\ADHealth.ps1" -输出“HTML”

    [玩转系统] 如何创建 PowerShell 计划任务

  7. 开始于

    始终将起始位置设置为与脚本所在位置相同的路径。这样,您的脚本生成的任何导出都将存储在与您的脚本相同的位置。否则,输出将保存在 C:\Windows\System32 中

  8. 完成

    单击下一步并在完成屏幕上检查您的设置。确保您选择打开属性对话框...,以便我们配置更多设置。

    [玩转系统] 如何创建 PowerShell 计划任务

  9. 高级设置

    我们需要为计划的 PowerShell 任务更改两个设置。我们需要确保脚本即使在未登录时也能运行,您可以在“常规”选项卡上执行此操作。

    并且我们希望确保脚本在运行时间超过一天。在设置下更改此设置,并将如果任务运行时间超过则停止任务设置为 1 天或更短。

    [玩转系统] 如何创建 PowerShell 计划任务

  10. 保存任务

    单击确定并输入您的密码,以便任务可以在您未登录时运行。测试您的任务总是一个好主意,右键单击它,并选择运行立即运行该任务。

使用PowerShell创建计划任务

我们当然也可以使用PowerShell来创建和管理计划任务。在 PowerShell 中创建计划任务需要几个步骤。对于每个步骤,我们将使用不同的 cmdlet。

要创建计划任务,我们将使用以下 cmdlet:

New-ScheduledTaskTrigger

为计划任务创建触发器对象

New-ScheduledTaskAction

为计划任务创建操作

Register-ScheduledTask

注册计划任务

Get-ScheduledTask

显示计划任务

要在 PowerShell 中创建计划任务,我们至少需要为该任务定义触发器和操作。因此,要创建一个每周五运行并执行 PowerShell 脚本的简单任务,我们可以执行以下操作:

$taskTrigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Friday -At 3am
$taskAction = New-ScheduledTaskAction -Execute "PowerShell" -Argument "-NoProfile -ExecutionPolicy Bypass -File 'C:\scripts\ADHealth.ps1' -Output 'HTML'" -WorkingDirectory 'c:\scripts'

Register-ScheduledTask 'Lazy PS Tasks' -Action $taskAction -Trigger $taskTrigger

这将创建与我们使用任务计划程序创建的完全相同的任务。但让我们解释一下每个 cmdlet,看看我们有哪些选项。

创建触发器 - New-ScheduledTaskTrigger

第一步是定义触发器。这决定了我们何时要运行任务。就像任务调度程序一样,我们可以为任务定义多个触发器。

New-ScheduledTaskTrigger cmdlet 附带几个参数,允许您定义任务运行的时间:

  • AtLogOn - 当用户登录时运行任务
  • AtStartup - 系统启动时
  • At - 与“一次”、“每天”或“每周”一起使用。定义运行任务的具体时间
  • 每日 - 每天运行。使用 DaysOfWeek 定义日期
  • DaysInterval - 每 x 天运行一次
  • DaysOfWeek - 这可以与“每日”或“每周”一起使用。定义运行任务的日期
  • 每周 - 每周运行任务
  • WeeklyInterval - 确定周之间的间隔。

因此,要在每周周二和周四上午 08:30 运行该任务,我们可以创建以下触发器:

$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Tuesday,Thursday -At 8:30am

定义操作 - New-ScheduledTaskAction

要在 PowerShell 中创建计划任务操作,我们需要定义希望它运行的程序、任何参数(例如 PowerShell 脚本的路径)以及工作目录(可选)。

因此,要运行 PowerShell 脚本,我们将 -Execute 参数设置为 PowerShell,并在 -Argument 参数中定义文件路径和其他参数。如果您的脚本需要它,您可以将 -WorkingDirectory 参数设置为脚本的路径

$action = New-ScheduledTaskAction -Execute 'PowerShell' -Argument '-NoProfile -ExecutionPolicy Bypass -File "C:\scripts\ADHealth.ps1" -Output "HTML"'

创建任务 - Register-ScheduledTask

定义了触发器和操作后,我们可以创建并注册计划任务。我们需要为我们的任务命名,我建议还添加一个任务路径(文件夹)。这将使您以后更容易检索任务。

Register-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath 'LazyTasks' -Action $taskAction -Trigger $taskTrigger

[玩转系统] 如何创建 PowerShell 计划任务

如前所述,您可以为您的任务定义多个触发器和操作。为此,您需要在数组中添加触发器或操作。例如,要每周二、周四以及每月的第一天运行该任务,我们可以执行以下操作:

# Define the triggers for Tuesday and Thursday at 08:30 AM and when a user logs on
$taskTriggers = @(
    New-ScheduledTaskTrigger -Weekly -DaysOfWeek Tuesday,Thursday -At 08:30,
    New-ScheduledTaskTrigger -AtLogon
)

Register-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath 'LazyTasks' -Action $taskAction -Trigger $taskTriggers

使用不同的权限运行任务

当我们使用计划任务创建 PowerShell 任务时,我们启用了无论用户是否登录都运行该任务的选项。为此,我们还需要提供用户名和密码来运行任务。此外,我们需要将任务的参数-RunLevel设置为最高

Register-ScheduledTask -TaskName "Lazy PowerShell Tasks" -taskPath 'LazyTasks' -Action $taskAction -Trigger $taskTrigger -User "a-d\Administrator" -Password 'yourPass123' -RunLevel Highest

查看计划任务

您可以在任务计划程序中查看您创建的任务。但您也可以使用 PowerShell 检索计划任务。为此,我们需要使用 cmdlet Get-ScheduledTask。如果运行不带任何参数的 cmdlet,它将检索计算机上的所有计划任务。

正如您所看到的,这是相当多的。这就是为什么使用 taskPath 参数在文件夹中组织任务非常重要。这样你就可以使用TaskPath参数来只查看我们的任务:

Get-ScheduledTask -TaskPath \LazyTasks\

任务路径始终以反斜杠 \ 开头和结尾。要查看您的任务,您需要提供任务名称。如果名称是唯一的,那么仅名称就足够了。否则,您还需要提供路径:

Get-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath \LazyTasks\ | Select *

[玩转系统] 如何创建 PowerShell 计划任务

正如您在上面的屏幕截图中看到的,我们无法看到任务的所有详细信息。要查看操作或触发器,我们需要展开属性。我们可以通过使用 ExpandProperty 方法或将结果保存在变量中来完成此操作:

Get-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath \LazyTasks\ | Select -ExpandProperty Triggers

# Or
$task = Get-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath \LazyTasks\
$task.Triggers

更新任务

要使用 PowerShell 更新计划任务,您可以使用 Set-ScheduledTask cmdlet。它的工作原理与 Register-ScheduledTask cmdlet 类似。只需先创建一个新的触发器或操作,然后像创建它一样添加它。

# Define new trigger
$newTrigger= New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 08:30

# Update the task
Set-ScheduledTask -TaskName "Lazy PowerShell Tasks" -taskPath 'LazyTasks'-Trigger $newTrigger

总结

计划 PowerShell 任务既可以使用任务计划程序完成,也可以在 PowerShell 中使用 Register-ScheduledTask cmdlet 完成。就我个人而言,我发现使用PowerShell创建任务更容易,但是要修改它,我发现任务调度程序更方便。

不过,您可以使用这两个选项来安排 PowerShell 脚本。我希望这篇文章对您有所帮助,如果您有任何疑问,请在下面发表评论。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯