Hầu hết người dùng và quản trị viên sử dụng taskchd.msc
bảng điều khiển giao diện đồ họa để tạo và quản lý các tác vụ đã lên lịch trên Windows. Tuy nhiên, trong các tập lệnh và quy trình tự động khác nhau, việc sử dụng các tính năng PowerShell để tạo các tác vụ đã lên lịch sẽ thuận tiện hơn nhiều. Trong bài viết này, chúng tôi sẽ hướng dẫn cách tạo và quản lý các tác vụ của Windows Scheduler bằng PowerShell.
Quản lý công việc đã lên lịch trên Windows qua PowerShell
Nhiệm vụ đã lên lịch Mô-đun PowerShell được sử dụng để quản lý các tác vụ đã lên lịch trên Windows 10 / Windows Server 2016. Bạn có thể liệt kê các lệnh ghép ngắn trong một mô-đun như sau:
Get-Command -Module SchedonedTasks
- Vô hiệu hoá-Nhiệm vụ đã Lập lịch
- Kích hoạt-Nhiệm vụ theo lịch trình
- Nhiệm vụ xuất theo lịch trình
- Get-ClusteredSchedisedTask
- Get-SchedisedTask
- Get-SchedisedTaskInfo
- Nhiệm vụ được Lập lịch Mới
- Hành động theo lịch trình mới
- New-SchedisedTaskPrincipal
- New-SchedisedTaskSettingsSet
- New-SchedisedTaskTrigger
- Đăng ký-ClusteredSchedonedTask
- Công việc Đăng ký-Lịch biểu
- Set-ClusteredSchedisedTask
- Đặt-lịch-nhiệm vụ
- Start-SchedisedTask
- Nhiệm vụ dừng theo lịch trình
- Unregister-ClusteredSchedonedTask
- Nhiệm vụ Hủy đăng ký-Đã lên lịch
Gợi ý . Trước đây, công cụ bảng điều khiển tích hợp sẵn
schtasks.exe
đã được sử dụng trong Windows để tạo và quản lý các công việc của bộ lập lịch. Tạo Tác vụ Đã lên lịch với Windows PowerShell
Trong các phiên bản PowerShell hiện đại (bắt đầu với PowerShell 3.0 trên Windows Server 2012 / Windows 8), bạn có thể sử dụng New-SchedisedTaskTrigger và Đăng ký-Nhiệm vụ được Lập lịch lệnh ghép ngắn để tạo các tác vụ đã lên lịch.
Giả sử, chúng ta cần tạo một tác vụ đã lên lịch sẽ chạy trong khi khởi động (hoặc tại một thời điểm cụ thể) và thực thi một số tập lệnh hoặc lệnh PowerShell. Hãy tạo một tác vụ đã lên lịch có tên là StartupScript1. Tác vụ này sẽ chạy tệp kịch bản PowerShell C:\ PS \ StartupScript.ps1 lúc 10:00 sáng hàng ngày. Nhiệm vụ sẽ được thực hiện với các đặc quyền nâng cao (hộp kiểm “Chạy với các đặc quyền cao nhất”) trong tài khoản HỆ THỐNG.
$ Trigger =New-SchedisedTaskTrigger-Lúc 10:00 sáng - Hàng ngày
$ User ="NT AUTHORITY \ SYSTEM"
$ Action =New-SchedisedTaskAction -Execute "PowerShell.exe" -Argument "C :\ PS \ StartupScript1.ps1 "
Register-SchedisedTask -TaskName" StartupScript1 "-Trigger $ Trigger -User $ User -Action $ Action -RunLevel Cao nhất –Force
Nếu nhiệm vụ được tạo thành công, trạng thái “Sẵn sàng” sẽ xuất hiện.
Tập lệnh PowerShell của bạn sẽ chạy theo lịch đã chỉ định. Nếu bạn đã bật Chính sách thực thi PowerShell trên máy tính của mình để ngăn các tập lệnh PS1 thực thi, bạn có thể chạy tập lệnh PowerShell từ một tác vụ đã lên lịch với –Bypass
tham số.
Sử dụng mã này khi tạo một nhiệm vụ mới:
$ Action =New-SchedisedTaskAction -Execute "PowerShell.exe" -Argument “-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -Tập tin C:\ PS \ StartupScript.ps1"
$ Trigger =New-SchedisedTaskTrigger -AtStartup
Nếu bạn muốn chạy một tác vụ khi người dùng đăng nhập:
$ Trigger =New-SchedisedTaskTrigger -AtLogon
Mở taskchd.msc
và đảm bảo rằng bạn có một tác vụ mới của bộ lập lịch trong Thư viện bộ lập lịch tác vụ.
Trong Powershell 2.0 (Windows 7, Windows Server 2008 R2), để tạo tác vụ đã lên lịch từ PowerShell, bạn có thể sử dụng Schedule.Service Giao diện COM (hoặc cập nhật phiên bản PowerShell). Trong ví dụ này, chúng tôi tạo một tác vụ đã lên lịch sẽ thực thi tệp cụ thể chứa tập lệnh PowerShell trong khi khởi động. Tác vụ được thực hiện với
NT AUTHORITY \ SYSTEM
đặc quyền.
$ TaskName ="NewPsTask"
$ TaskDescription ="Chạy tập lệnh PowerShell từ Task Scheduler"
$ TaskCommand ="c:\ windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe"
$ TaskScript ="C:\ PS \ StartupScript.ps1"
$ TaskArg ="-WindowStyle Hidden -NonInteractive -Executionpolicy unrestricted -file $ TaskScript"
$ TaskStartTime =[datetime] ::Now .AddMinutes (1)
$ service =new-object -ComObject ("Schedule.Service")
$ service.Connect ()
$ rootFolder =$ service.GetFolder ("\")
$ TaskDefinition =$ service.NewTask (0)
$ TaskDefinition.RegistrationInfo.Description ="$ TaskDescription"
$ TaskDefinition.Settings.Enabled =$ true
$ TaskDefinition.Settings .AllowDemandStart =$ true
$ triggers =$ TaskDefinition.Triggers
#https://msdn.microsoft.com/en-us/library/windows/desktop/aa383915 (v =vs.85). aspx
$ trigger =$ triggers.Create (8)
Làm cách nào để xem và chạy các tác vụ đã lên lịch với PowerShell?
Bạn có thể liệt kê tất cả các tác vụ đã lên lịch đang hoạt động trên Windows bằng lệnh:
Get-SchedisedTask -TaskPath | ? state -ne Disabled
Để nhận thông tin về một nhiệm vụ cụ thể:
Get-SchedisedTask CheckServiceState | Get-SchedisedTaskInfo
LastRunTime : 4/7/2021 10:00:00 AM LastTaskResult : 267011 NextRunTime : 4/8/2021 10:00:00 AM NumberOfMissedRuns : 0 TaskName : CheckServiceState TaskPath : \ PSComputerName :
Bạn có thể tắt tác vụ này:
Get-SchedisedTask CheckServiceState | Nhiệm vụ vô hiệu hóa theo lịch
Để kích hoạt một tác vụ:
Get-SchedisedTask CheckServiceState | Enable-SchedonedTask
Để chạy tác vụ ngay lập tức (không cần chờ lịch), hãy chạy:
Start-SchedisedTask CheckServiceState
Để xóa hoàn toàn một công việc khỏi thư viện Bộ lập lịch tác vụ:
Unregister-ScheduredTask -TaskName CheckServiceState
Nếu bạn cần thay đổi tên người dùng mà từ đó tác vụ được khởi chạy và, ví dụ:chế độ tương thích, hãy sử dụng Nhiệm vụ đặt lịch lệnh ghép ngắn:
> Cài đặt $ task_settings
Nếu bạn nhận được lỗi “ Set-SchedisedTask:Không có ánh xạ giữa tên tài khoản và ID bảo mật được thực hiện
”Kiểm tra xem bạn có cung cấp đúng tên người dùng không.
Làm cách nào để Xuất và Nhập Công việc đã Lập lịch qua Tệp XML?
PowerShell cho phép bạn xuất cài đặt hiện tại của bất kỳ tác vụ đã lên lịch nào thành tệp XML văn bản. Vì vậy, bạn có thể xuất các tham số của bất kỳ tác vụ nào và triển khai một tác vụ sang các máy tính khác. Tác vụ có thể được xuất cả từ GUI của Trình lập lịch tác vụ và từ bảng điều khiển PowerShell.
Đây là lệnh xuất tác vụ với tên StartupScript sang tệp StartupScript.xml:
Export-SchedisedTask StartupScript | out-file c:\ tmp \ StartupScript.xml
Lệnh ghép ngắn Export-SchedisedTask không khả dụng trong PowerShell 2.0, vì vậy trong Windows 7 / Windows Server 2008 R2, tốt hơn nên sử dụng công cụ tích hợp schtasks để xuất cài đặt nhiệm vụ và chuyển hướng kết quả thành tệp văn bản:
schtasks / query / tn "NewPsTask" / xml>> "c:\ tmp \ NewPsTask.xml"
Sau khi cài đặt tác vụ đã lên lịch được xuất sang tệp XML, nó có thể được nhập vào bất kỳ máy tính mạng nào bằng GUI, SchTasks.exe hoặc PowerShell.
Đăng ký-Nhiệm vụ theo lịch trình cmdlet có thể giúp bạn nhập cài đặt tác vụ từ tệp XML và đăng ký nó:
Register-SchedisedTask -Xml (Get-Content “\\ mun-fs01 \ public \ NewPsTask.xml” | out-string) -TaskName "NewPsTask"
Trong PowerShell 2.0 (Windows 7 / Server 2008 R2), việc nhập tác vụ bằng công cụ schtasks sẽ dễ dàng hơn. Lệnh đầu tiên tạo một nhiệm vụ mới. Cái thứ hai sẽ chạy nó ngay lập tức (mà không cần đợi trình kích hoạt để kích hoạt nó).
schtasks / create / tn "NewPsTask" / xml "\\ Srv1 \ public \ NewPsTask.xml" / ru corp \ skrutapal / rp Pa $$ w0rd
schtasks / Run / TN "NewPsTask"
Xin lưu ý rằng ví dụ này sử dụng thông tin đăng nhập của tài khoản được sử dụng để chạy tác vụ. Nếu thông tin xác thực không được chỉ định vì chúng không được lưu trữ trong công việc, chúng sẽ được yêu cầu khi nhập.