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

Jacki

在Windows中,内置的任务计划程序可用于根据计划或在发生特定事件时执行操作。本指南介绍如何使用 Windows 任务计划程序将 PowerShell 脚本配置为自动运行。 PS1 脚本应在后台运行,不显示弹出窗口,并且无论当前 PowerShell 脚本执行策略设置如何都运行。

在这个例子中,我想运行C:PSOutlook_Email_to.ps1每 10 分钟生成一次 PowerShell 脚本文件。

阅读更多:

  1. 打开任务调度程序通过运行控制台taskschd.msc命令
  2. 展开任务计划程序库树。为了方便起见,请为自定义计划任务创建一个单独的文件夹。右键单击并选择创建任务
  3. 一般的选项卡,指定任务名称以及运行该任务的用户。该任务可以自动运行: – 当特定用户登录时(Run only the task is logged in)– 或用户是否已登录 (Run whether user is logged on or not)。

    第二种模式最常用。在第二种情况下,您可以指定该任务应代表特定用户运行(用于存储用户密码的凭据管理器)。如果任务需要提升,请启用 '以最高权限运行' 选项。

    为了避免使用存储的密码,您可以将任务配置为以具有最高权限的 NT AUTHORITYSYSTEM 身份运行。为此,请输入SYSTEM用户场地。
    在 AD 环境中,计划任务可以代表 gMSA 托管服务帐户运行。

  4. 触发器选项卡中,指定计划程序任务启动的条件或时间。例如,要在用户登录时运行任务,请选择“登录时' 触发并选择频率10分钟在 '重复任务每隔' 选项。
  5. 如果该任务代表 SYSTEM 或具有存储密码的用户运行,请选择在 Windows 启动时运行该任务 (启动时)并定期重新启动它。
  6. 或者使用按计划进行触发器来设置任务开始的确切时间。可以为单个任务配置多个启动触发器。
    计划程序还可以在事件查看器中发生特定事件时运行任务(请参阅如何在另一个任务完成后运行计划任务)。
  7. 然后前往行动选项卡。指定发生任何触发事件时要采取的操作。在这种情况下我想运行 PowerShell 脚本。选择新的->启动一个程序。配置以下操作设置:
    程序/脚本:powershell.exe
    添加参数(可选): -ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File "C:PSOutlook_Email_to.ps1" 在通过任务计划程序运行脚本之前,请检查它在无人值守模式下是否返回任何错误。使用以下命令:
    powershell.exe -file C:PS Outlook_Email_to.ps1 -NoExit
  8. 以下选项用于运行 PowerShell 脚本:
    -File– 脚本文件的完整路径 (PS1)
    -ExecutionPolicy— 设置当前会话的 PowerShell 脚本执行策略设置。当前策略设置将被忽略,并且无论如何都会执行脚本,如果旁路已指定;
    -NonInteractive– 不向用户显示交互式提示
    -WindowStyle Hidden– 对用户隐藏 PowerShell 控制台窗口(脚本隐藏运行)。如果计划程序任务设置为在用户登录时运行,则在脚本运行时,PowerShell 提示窗口可能会出现并暂时消失。仅对于在控制台会话 0 中启动的脚本没有闪烁提示(无论用户登录如何)。
    -NoProfile— 如果脚本可以在没有用户配置文件的情况下运行,请添加此选项。它可以防止加载用户配置文件,从而加快脚本的执行速度;
  9. 您可以在中启用以下有用的选项设置选项卡:
    允许任务按需运行
    如果正在运行的任务没有按请求结束,则强制其停止
    不要启动新实例
  10. 保存任务设置。检查新任务是否出现在任务调度程序管理单元。单击任务并选择跑步来测试它。

    如果 PowerShell 脚本已成功运行,则“上次运行结果”中将显示一条消息:
    The operation completed sucessfully (0x0).

    要将所有操作记录到文本日志文件中,我们建议您向 PowerShell 脚本添加一个简单的日志记录功能。这允许随时查看有关执行的所有操作的详细信息。

  11. 使用历史选项卡可查看先前任务运行的历史记录和结果。默认情况下,任务历史记录不会保存在任务计划程序中(单击启用所有任务历史记录操作窗格中的链接)。

您还可以创建这样的计划程序任务以从命令提示符运行 PowerShell 脚本:

$TaskName="CheckOutlookMailbox"
$Trigger = New-ScheduledTaskTrigger -AtStartup
$Trigger.Repetition = (New-ScheduledTaskTrigger -once -at "12am" -RepetitionInterval (New-TimeSpan -Minutes 10) -RepetitionDuration (New-TimeSpan -Minutes 10)).repetition
$User= "NT AUTHORITYSYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File C:PSOutlook_Email_to.ps1"
Register-ScheduledTask -TaskName $TaskName -Trigger $Trigger -User $User -Action $Action -RunLevel Highest -Force

通过 Windows 任务计划程序运行 PowerShell 脚本时还需要考虑一些其他事项:

  • 要在 PowerShell Core 环境中运行脚本,请运行pwsh.exe而不是powershell.exe
  • 如果其他用户可以使用特权访问您运行 PowerShell 脚本的计算机,请确保您已更改 PS1 文件的 NTFS 访问权限,以便他们无法修改该文件。
  • 如果任务以非特权用户身份运行,则必须将其帐户添加到本地安全策略中作为批处理作业登录 (gpedit.msc-> 计算机配置->Windows 设置->安全设置->当地政策->用户权利分配)。创建此类任务时会出现警告:
    This task requires that the user account specified has Log on as batch job rights

  • 在 AD 域中,您可以使用 GPO 在用户登录或注销或计算机启动或关闭时运行 PowerShell 脚本。此类脚本称为登录脚本