เรียกใช้สคริปต์ PowerShell ตามกำหนดเวลาด้วย Task Scheduler
ใน Windows Task Scheduler ในตัวสามารถใช้เพื่อดำเนินการตามกำหนดเวลาหรือเมื่อมีเหตุการณ์บางอย่างเกิดขึ้น คู่มือนี้จะอธิบายวิธีกำหนดค่าสคริปต์ PowerShell ให้ทำงานโดยอัตโนมัติโดยใช้ Windows Task Scheduler สคริปต์ PS1 ควรทำงานในพื้นหลัง ไม่แสดงป๊อปอัป และทำงานโดยไม่คำนึงถึงการตั้งค่านโยบายการดำเนินการสคริปต์ PowerShell ในปัจจุบัน
ในตัวอย่างนี้ ฉันต้องการเรียกใช้
C:\PS\Outlook_Email_to.ps1ไฟล์สคริปต์ PowerShell ทุก 10 นาที
เปิดคอนโซล Task Scheduler ด้วยการเรียกใช้
taskschd.mscสั่งการ
-
ขยายแผนผังไลบรารี Task Scheduler เพื่อความสะดวก ให้สร้างโฟลเดอร์แยกต่างหากสำหรับงานตามกำหนดเวลาที่คุณกำหนดเอง คลิกขวาและเลือก สร้างงาน
ในแท็บ ทั่วไป ให้ระบุชื่องานและผู้ใช้ที่จะใช้งาน งานสามารถทำงานได้โดยอัตโนมัติ:
- เมื่อผู้ใช้เฉพาะเข้าสู่ระบบ (Run only the task is logged in)
- หรือไม่ว่าผู้ใช้จะเข้าสู่ระบบหรือไม่ (Run whether user is logged on or not).
โหมดที่สองถูกใช้บ่อยที่สุด ในกรณีที่สอง คุณสามารถระบุได้ว่างานควรทำงานในนามของผู้ใช้รายใดรายหนึ่ง (ตัวจัดการข้อมูลรับรองที่ใช้ในการจัดเก็บรหัสผ่านของผู้ใช้) หากงานต้องการการยกระดับ ให้เปิดใช้งานตัวเลือก 'เรียกใช้ด้วยสิทธิ์สูงสุด'
ในแท็บ ทริกเกอร์ ให้ระบุเงื่อนไขหรือเวลาสำหรับงาน Scheduler เพื่อเริ่มต้น ตัวอย่างเช่น หากต้องการเรียกใช้งานเมื่อผู้ใช้เข้าสู่ระบบ ให้เลือกทริกเกอร์ 'เมื่อเข้าสู่ระบบ' และเลือกความถี่ 10 นาทีใน 'งานซ้ำ ทุก' ตัวเลือก
หากงานทำงานในนามของระบบหรือผู้ใช้ที่มีรหัสผ่านที่เก็บไว้ ให้เลือกเพื่อรันงานเมื่อ Windows เริ่มทำงาน (เมื่อเริ่มต้น) และรีสตาร์ทเป็นระยะ
หรือใช้ทริกเกอร์ ตามกำหนดเวลา เพื่อตั้งเวลาที่แน่นอนสำหรับการเริ่มต้นงาน สามารถกำหนดค่าทริกเกอร์การเริ่มต้นหลายรายการสำหรับงานเดียวได้
ตัวกำหนดเวลายังสามารถรันงานเมื่อมีเหตุการณ์เฉพาะเกิดขึ้นใน Event Viewer (ดูวิธีรันงานที่กำหนดเวลาไว้หลังจากงานอื่นเสร็จสิ้น)
จากนั้นไปที่แท็บ การทำงาน ระบุการดำเนินการที่จะดำเนินการเมื่อมีเหตุการณ์ใดๆ ที่ถูกทริกเกอร์เกิดขึ้น ฉันต้องการเรียกใช้สคริปต์ PowerShell ในกรณีนี้ เลือก ใหม่ -> เริ่มโปรแกรม กำหนดการตั้งค่าการทำงานต่อไปนี้:
โปรแกรม/สคริปต์:powershell.exeเพิ่มอาร์กิวเมนต์ (ไม่บังคับ):
-ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File "C:\PS\Outlook_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 ซึ่งช่วยให้สามารถดูข้อมูลโดยละเอียดเกี่ยวกับการดำเนินการทั้งหมดที่ดำเนินการได้ตลอดเวลา
ใช้แท็บ ประวัติ เพื่อดูประวัติและผลลัพธ์ของการเรียกใช้งานครั้งก่อน ประวัติงานจะไม่ถูกบันทึกตามค่าเริ่มต้นใน Task Scheduler (คลิกลิงก์ เปิดใช้งานประวัติงานทั้งหมด ในบานหน้าต่างการดำเนินการ)
คุณยังสามารถสร้างงาน Scheduler เพื่อเรียกใช้สคริปต์ 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 AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File C:\PS\Outlook_Email_to.ps1"
Register-ScheduledTask -TaskName $TaskName -Trigger $Trigger -User $User -Action $Action -RunLevel Highest -Forceมีสิ่งเพิ่มเติมที่ควรพิจารณาเมื่อเรียกใช้สคริปต์ PowerShell ผ่าน Windows Task Scheduler:
หากต้องการเรียกใช้สคริปต์ในสภาพแวดล้อม PowerShell Core ให้เรียกใช้
pwsh.exeแทน
powershell.exeหากผู้ใช้รายอื่นสามารถเข้าถึงคอมพิวเตอร์ที่คุณใช้งานสคริปต์ PowerShell ด้วยสิทธิ์พิเศษ ตรวจสอบให้แน่ใจว่าคุณได้เปลี่ยนสิทธิ์การเข้าถึง NTFS ในไฟล์ PS1 เพื่อไม่ให้สามารถแก้ไขได้
หากงานถูกรันในฐานะผู้ใช้ที่ไม่มีสิทธิ์ บัญชีของพวกเขาจะต้องถูกเพิ่มลงในนโยบายความปลอดภัยในเครื่อง เข้าสู่ระบบเป็นงานแบตช์ (gpedit.msc -> การกำหนดค่าคอมพิวเตอร์ -> การตั้งค่า Windows -> การตั้งค่าความปลอดภัย -> นโยบายท้องถิ่น -> การกำหนดสิทธิ์ผู้ใช้) คำเตือนจะปรากฏขึ้นเมื่อ การสร้างงานดังกล่าว:
This task requires that the user account specified has Log on as batch job rightsในโดเมน AD คุณสามารถใช้ GPO เพื่อเรียกใช้สคริปต์ PowerShell เมื่อผู้ใช้เข้าสู่ระบบหรือปิด หรือเมื่อคอมพิวเตอร์เริ่มหรือปิดเครื่อง สคริปต์ดังกล่าวเรียกว่า สคริปต์การเข้าสู่ระบบ








