使用任務調度程序在時間表上運行PowerShell腳本
在Windows中,內置任務調度程序可用於根據時間表或某個事件發生時執行操作。本指南說明瞭如何通過使用Windows Task Scheduler配置PowerShell腳本以自動運行。 PS1腳本應在後台運行,不顯示彈出窗口,並且無論當前的PowerShell腳本執行策略設置如何。
在此示例中,我想運行C:PSOutlook_Email_to.ps1PowerShell腳本每10分鍾文件。
- 打開任務調度程序通過運行
taskschd.msc命令 - 展開任務調度程序庫樹。為了方便起見,為您的自定義計劃任務創建一個單獨的文件夾。右鍵單擊並選擇創建任務。

- 在一般的選項卡,指定任務名稱及其將運行的用戶。任務可以自動運行: - 登錄特定用戶(
Run only the task is logged in) - 或用戶是否已登錄(Run whether user is logged on or not)。第二種模式最常使用。在第二種情況下,您可以指定任務應代表特定用戶(用於存儲用戶密碼的憑據管理器)運行。如果任務需要高程,請啟用'擁有最高特權' 選項。


為了避免使用存儲的密碼,您可以將任務配置為具有最高特權的NT AuthoritySystems。為此,輸入
SYSTEM在用戶場地。

在廣告環境中,計劃的任務可以代表GMSA託管服務帳戶運行。 - 在觸發器選項卡,指定調度程序任務啟動的條件或時間。例如,要在用戶登錄時運行任務,請選擇'在登錄處'觸發並選擇一個頻率10數分鐘每次重複任務' 選項。


- 如果任務代表系統或使用存儲密碼的用戶運行,請在Windows啟動時選擇要運行任務(在啟動時)並定期重新啟動。


- 或使用按時間表觸發以設置任務啟動的確切時間。可以為一個任務配置多個啟動觸發器。
當事件查看器中發生特定事件時,調度程序還可以運行任務(在另一個任務完成後,請參閱如何運行計劃任務)。 - 然後去動作選項卡。指定任何觸發事件發生時要採取的措施。在這種情況下,我想運行一個PowerShell腳本。選擇新的- >開始程序。配置以下操作設置:
程序/腳本:powershell.exe
添加參數(可選):-ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File "C:PSOutlook_Email_to.ps1"
在通過任務調度程序運行腳本之前,請檢查其在無人看管模式下沒有返回任何錯誤。使用以下命令:
powershell.exe -file C:PS Outlook_Email_to.ps1 -NoExit - 以下選項用於運行PowerShell腳本:
-File- 腳本文件的完整路徑(PS1)
-ExecutionPolicy- 為當前會話設置PowerShell腳本執行策略設置。當前的策略設置將被忽略,如果旁路指定;
-NonInteractive- 請勿向用戶顯示交互式提示
-WindowStyle Hidden- 從用戶隱藏PowerShell控制台窗口(腳本隱藏)。如果用戶登錄時設置了調度程序任務,則PowerShell提示窗口可能會出現並暫時消失。只有在控制台會話0中啟動的腳本(無論用戶登錄如何)都沒有閃爍的提示。
-NoProfile- 如果腳本可以在沒有用戶配置文件的情況下工作,則添加此選項。它可以防止用戶配置文件加載,從而加快了腳本的執行。 - 您可以在設定選項卡:
允許按需運行任務
如果運行任務在要求時未結束,請強迫它停止
不要啟動新實例 - 保存任務設置。檢查新任務是否出現在任務調度程序快照。單擊任務並選擇跑步測試它。


如果PowerShell腳本已成功運行,則將在上次運行結果中顯示一條消息:The operation completed sucessfully (0x0).
要將所有操作記錄到文本日誌文件中,我們建議您在PowerShell腳本中添加一個簡單的日誌記錄功能。這允許查看有關隨時執行的所有操作的詳細信息。
- 使用歷史選項卡以查看以前任務的歷史記錄和結果。默認情況下,任務記錄並未保存在任務調度程序中(單擊啟用所有任務歷史記錄鏈接在動作窗格中)。


您還可以創建此類調度程序任務,以從命令提示符運行PowerShell腳本:
了解更多:如何安排PC自動打開Windows 10
$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 Task Scheduler運行PowerShell腳本時,還有一些其他事情要考慮:
- 要在PowerShell核心環境中運行腳本,請運行
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腳本。這樣的腳本被稱為登錄腳本。
