ผู้ใช้และผู้ดูแลระบบส่วนใหญ่ใช้ taskschd.msc
คอนโซลอินเทอร์เฟซแบบกราฟิกเพื่อสร้างและจัดการงานที่กำหนดเวลาไว้บน Windows อย่างไรก็ตาม ในสคริปต์ต่างๆ และโฟลว์อัตโนมัติ จะสะดวกกว่ามากที่จะใช้ฟีเจอร์ PowerShell เพื่อสร้างงานที่กำหนดเวลาไว้ ในบทความนี้ เราจะแสดงวิธีสร้างและจัดการงาน Windows Scheduler โดยใช้ PowerShell
การจัดการงานที่กำหนดเวลาไว้บน Windows ผ่าน PowerShell
ScheduledTasks โมดูล PowerShell ใช้เพื่อจัดการงานที่กำหนดเวลาไว้บน Windows 10/Windows Server 2016 คุณสามารถแสดงรายการ cmdlets ในโมดูลได้ดังนี้:
Get-Command -Module ScheduledTasks
- Disable-ScheduledTask
- Enable-ScheduledTask
- ส่งออก-ScheduledTask
- Get-ClusteredScheduledTask
- Get-ScheduledTask
- Get-ScheduledTaskInfo
- New-ScheduledTask
- New-ScheduledTaskAction
- New-ScheduledTaskPrincipal
- New-ScheduledTaskSettingsSet
- New-ScheduledTaskTrigger
- Register-ClusteredScheduledTask
- Register-ScheduledTask
- Set-ClusteredScheduledTask
- Set-ScheduledTask
- เริ่ม-ScheduledTask
- หยุด-ScheduledTask
- Unregister-ClusteredScheduledTask
- Unregister-ScheduledTask
คำแนะนำ . ก่อนหน้านี้ เครื่องมือคอนโซลในตัว
schtasks.exe
ถูกใช้ใน Windows เพื่อสร้างและจัดการงานตัวกำหนดตารางเวลา การสร้างงานที่กำหนดเวลาไว้ด้วย Windows PowerShell
ใน PowerShell เวอร์ชันใหม่ (เริ่มต้นด้วย PowerShell 3.0 บน Windows Server 2012/Windows 8) คุณสามารถใช้ New-ScheduledTaskTrigger และ Register-ScheduledTask cmdlets เพื่อสร้างงานที่กำหนดเวลาไว้
สมมติว่า เราจำเป็นต้องสร้างงานที่กำหนดเวลาไว้ซึ่งควรทำงานในระหว่างการเริ่มต้น (หรือในเวลาที่กำหนด) และดำเนินการสคริปต์หรือคำสั่ง PowerShell บางรายการ มาสร้างงานที่กำหนดเวลาไว้ชื่อ StartupScript1 งานนี้ควรเรียกใช้ไฟล์สคริปต์ PowerShell C:\PS\StartupScript.ps1 เวลา 10.00 น. ทุกวัน งานจะดำเนินการด้วยสิทธิ์ระดับสูง (ช่องทำเครื่องหมาย “เรียกใช้ด้วยสิทธิ์สูงสุด”) ภายใต้บัญชีระบบ
$Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
$User= "NT AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\StartupScript1.ps1"
Register-ScheduledTask -TaskName "StartupScript1" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force
หากสร้างงานสำเร็จ สถานะ “พร้อม” จะปรากฏขึ้น
สคริปต์ PowerShell ของคุณจะทำงานตามกำหนดเวลาที่ระบุ หากคุณมี PowerShell Execution Policy ที่เปิดใช้งานบนคอมพิวเตอร์ของคุณซึ่งป้องกันไม่ให้สคริปต์ PS1 ทำงาน คุณสามารถเรียกใช้สคริปต์ PowerShell จากงานที่กำหนดเวลาไว้ด้วย –Bypass
พารามิเตอร์
ใช้รหัสนี้เมื่อสร้างงานใหม่:
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument “-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:\PS\StartupScript.ps1"
$Trigger= New-ScheduledTaskTrigger -AtStartup
หากคุณต้องการเรียกใช้งานเมื่อผู้ใช้ล็อกออน:
$Trigger= New-ScheduledTaskTrigger -AtLogon
เปิด taskschd.msc
คอนโซล และตรวจสอบให้แน่ใจว่าคุณมีงานตัวกำหนดตารางเวลาใหม่ในไลบรารีตัวกำหนดเวลางาน
ใน Powershell 2.0 (Windows 7, Windows Server 2008 R2) ในการสร้างงานที่กำหนดเวลาไว้จาก PowerShell คุณสามารถใช้ Schedule.Service อินเทอร์เฟซ COM (หรืออัปเดตเวอร์ชัน PowerShell) ในตัวอย่างนี้ เราสร้างงานที่กำหนดเวลาไว้ซึ่งจะรันไฟล์เฉพาะที่มีสคริปต์ PowerShell ในระหว่างการเริ่มต้น งานจะดำเนินการด้วย
NT AUTHORITY\SYSTEM
สิทธิพิเศษ
$TaskName = "NewPsTask"
$TaskDescription = "Running PowerShell script from 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)
วิธีการดูและเรียกใช้งานที่กำหนดเวลาไว้ด้วย PowerShell
คุณแสดงรายการงานที่กำหนดเวลาไว้ทั้งหมดบน Windows ได้โดยใช้คำสั่ง:
Get-ScheduledTask -TaskPath | ? state -ne Disabled
ในการรับข้อมูลเกี่ยวกับงานเฉพาะ:
Get-ScheduledTask CheckServiceState| Get-ScheduledTaskInfo
LastRunTime : 4/7/2021 10:00:00 AM LastTaskResult : 267011 NextRunTime : 4/8/2021 10:00:00 AM NumberOfMissedRuns : 0 TaskName : CheckServiceState TaskPath : \ PSComputerName :
คุณสามารถปิดใช้งานงานนี้:
Get-ScheduledTask CheckServiceState | Disable-ScheduledTask
วิธีเปิดใช้งาน:
Get-ScheduledTask CheckServiceState | Enable-ScheduledTask
หากต้องการเรียกใช้งานทันที (โดยไม่ต้องรอกำหนดการ) ให้เรียกใช้:
Start-ScheduledTask CheckServiceState
หากต้องการลบงานออกจากไลบรารี Task Scheduler โดยสมบูรณ์:
Unregister-ScheduledTask -TaskName CheckServiceState
หากคุณต้องการเปลี่ยนชื่อผู้ใช้ที่ใช้เริ่มงาน ตัวอย่างเช่น โหมดความเข้ากันได้ ให้ใช้ Set-ScheduledTask cmdlet:
$task_user = New-ScheduledTaskPrincipal -UserId woshub\j.abrams' -RunLevel Highest
$task_settings = New-ScheduledTaskSettingsSet -Compatibility 'Win8'
Set-ScheduledTask -TaskName CheckServiceState_PS -Principal $task_user -Settings $task_settings
หากคุณได้รับข้อผิดพลาด “Set-ScheduledTask: No mapping between account names and security IDs was done
” ตรวจสอบว่าคุณระบุชื่อผู้ใช้ที่ถูกต้อง
จะส่งออกและนำเข้างานที่กำหนดเวลาไว้ผ่านไฟล์ XML ได้อย่างไร
PowerShell ช่วยให้คุณสามารถส่งออกการตั้งค่าปัจจุบันของงานที่กำหนดเวลาไว้ลงในไฟล์ XML แบบข้อความ ดังนั้น คุณจึงสามารถส่งออกพารามิเตอร์ของงานใดๆ และปรับใช้งานกับคอมพิวเตอร์เครื่องอื่นได้ งานอาจถูกส่งออกทั้งจาก Task Scheduler GUI และจากคอนโซล PowerShell
นี่คือคำสั่งเพื่อส่งออกงานที่มีชื่อว่า StartupScript ไปยังไฟล์ StartupScript.xml:
Export-ScheduledTask StartupScript | out-file c:\tmp\StartupScript.xml
cmdlet ของ Export-ScheduledTask ไม่มีใน PowerShell 2.0 ดังนั้นใน Windows 7 / Windows Server 2008 R2 ควรใช้เครื่องมือในตัว schtasks เพื่อส่งออกการตั้งค่างานและเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์ข้อความ:
schtasks /query /tn "NewPsTask" /xml >> "c:\tmp\NewPsTask.xml"
หลังจากส่งออกการตั้งค่างานตามกำหนดเวลาไปยังไฟล์ XML แล้ว ก็สามารถนำเข้าไปยังคอมพิวเตอร์เครือข่ายใดก็ได้โดยใช้ GUI, SchTasks.exe หรือ PowerShell
Register-ScheduledTask cmdlet สามารถช่วยคุณนำเข้าการตั้งค่างานจากไฟล์ XML และลงทะเบียนได้:Register-ScheduledTask -Xml (Get-Content “\\mun-fs01\public\NewPsTask.xml” | out-string) -TaskName "NewPsTask"
ใน PowerShell 2.0 (Windows 7/Server 2008 R2) การนำเข้างานโดยใช้เครื่องมือ schtasks จะง่ายกว่า คำสั่งแรกสร้างงานใหม่ วินาทีจะเรียกใช้ทันที (โดยไม่ต้องรอให้ทริกเกอร์เปิดใช้งาน)
schtasks /create /tn "NewPsTask" /xml "\\Srv1\public\NewPsTask.xml" /ru corp\skrutapal /rp Pa$$w0rd
schtasks /Run /TN "NewPsTask"
โปรดทราบว่าตัวอย่างนี้ใช้ข้อมูลประจำตัวของบัญชีที่ใช้ในการรันงาน หากไม่มีการระบุข้อมูลประจำตัว เนื่องจากไม่ได้จัดเก็บไว้ในงาน ระบบจะขอข้อมูลประจำตัวเมื่อนำเข้า