ค้นหาเว็บไซต์

เรียกใช้สคริปต์ PowerShell ตามกำหนดเวลาด้วย Task Scheduler


ใน Windows Task Scheduler ในตัวสามารถใช้เพื่อดำเนินการตามกำหนดเวลาหรือเมื่อมีเหตุการณ์บางอย่างเกิดขึ้น คู่มือนี้จะอธิบายวิธีกำหนดค่าสคริปต์ PowerShell ให้ทำงานโดยอัตโนมัติโดยใช้ Windows Task Scheduler สคริปต์ PS1 ควรทำงานในพื้นหลัง ไม่แสดงป๊อปอัป และทำงานโดยไม่คำนึงถึงการตั้งค่านโยบายการดำเนินการสคริปต์ PowerShell ในปัจจุบัน

ในตัวอย่างนี้ ฉันต้องการเรียกใช้

C:\PS\Outlook_Email_to.ps1

ไฟล์สคริปต์ PowerShell ทุก 10 นาที

  1. เปิดคอนโซล Task Scheduler ด้วยการเรียกใช้

    taskschd.msc

    สั่งการ

  2. ขยายแผนผังไลบรารี Task Scheduler เพื่อความสะดวก ให้สร้างโฟลเดอร์แยกต่างหากสำหรับงานตามกำหนดเวลาที่คุณกำหนดเอง คลิกขวาและเลือก สร้างงาน

  3. ในแท็บ ทั่วไป ให้ระบุชื่องานและผู้ใช้ที่จะใช้งาน งานสามารถทำงานได้โดยอัตโนมัติ:

    - เมื่อผู้ใช้เฉพาะเข้าสู่ระบบ (

    Run only the task is logged in

    )

    - หรือไม่ว่าผู้ใช้จะเข้าสู่ระบบหรือไม่ (

    Run whether user is logged on or not

    ).

    โหมดที่สองถูกใช้บ่อยที่สุด ในกรณีที่สอง คุณสามารถระบุได้ว่างานควรทำงานในนามของผู้ใช้รายใดรายหนึ่ง (ตัวจัดการข้อมูลรับรองที่ใช้ในการจัดเก็บรหัสผ่านของผู้ใช้) หากงานต้องการการยกระดับ ให้เปิดใช้งานตัวเลือก 'เรียกใช้ด้วยสิทธิ์สูงสุด'

    เพื่อหลีกเลี่ยงการใช้รหัสผ่านที่เก็บไว้ คุณสามารถกำหนดค่างานให้ทำงานเป็น NT AUTHORITY\SYSTEM ที่มีสิทธิ์สูงสุดได้ เพื่อสิ่งนั้น ให้ป้อน

    SYSTEM

    ในช่อง ผู้ใช้

    ในสภาพแวดล้อม AD งานที่กำหนดเวลาไว้สามารถทำงานได้ในนามของบัญชีบริการที่ได้รับการจัดการของ gMSA

  4. ในแท็บ ทริกเกอร์ ให้ระบุเงื่อนไขหรือเวลาสำหรับงาน Scheduler เพื่อเริ่มต้น ตัวอย่างเช่น หากต้องการเรียกใช้งานเมื่อผู้ใช้เข้าสู่ระบบ ให้เลือกทริกเกอร์ 'เมื่อเข้าสู่ระบบ' และเลือกความถี่ 10 นาทีใน 'งานซ้ำ ทุก' ตัวเลือก

  5. หากงานทำงานในนามของระบบหรือผู้ใช้ที่มีรหัสผ่านที่เก็บไว้ ให้เลือกเพื่อรันงานเมื่อ Windows เริ่มทำงาน (เมื่อเริ่มต้น) และรีสตาร์ทเป็นระยะ

  6. หรือใช้ทริกเกอร์ ตามกำหนดเวลา เพื่อตั้งเวลาที่แน่นอนสำหรับการเริ่มต้นงาน สามารถกำหนดค่าทริกเกอร์การเริ่มต้นหลายรายการสำหรับงานเดียวได้

    ตัวกำหนดเวลายังสามารถรันงานเมื่อมีเหตุการณ์เฉพาะเกิดขึ้นใน Event Viewer (ดูวิธีรันงานที่กำหนดเวลาไว้หลังจากงานอื่นเสร็จสิ้น)

  7. จากนั้นไปที่แท็บ การทำงาน ระบุการดำเนินการที่จะดำเนินการเมื่อมีเหตุการณ์ใดๆ ที่ถูกทริกเกอร์เกิดขึ้น ฉันต้องการเรียกใช้สคริปต์ 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
  8. ตัวเลือกต่อไปนี้ใช้เพื่อเรียกใช้สคริปต์ PowerShell:

    -File

    - เส้นทางแบบเต็มไปยังไฟล์สคริปต์ (PS1)

    -ExecutionPolicy

    — ตั้งค่านโยบายการดำเนินการสคริปต์ PowerShell สำหรับเซสชันปัจจุบัน การตั้งค่านโยบายปัจจุบันจะถูกละเว้น และสคริปต์จะถูกดำเนินการต่อไปหากมีการระบุ บายพาส;

    -NonInteractive

    - อย่าแสดงข้อความโต้ตอบแก่ผู้ใช้

    -WindowStyle Hidden

    - ซ่อนหน้าต่างคอนโซล PowerShell จากผู้ใช้ (สคริปต์ทำงานซ่อนอยู่) หน้าต่างพร้อมท์ PowerShell อาจปรากฏขึ้นและหายไปชั่วขณะในขณะที่สคริปต์กำลังทำงานอยู่ หากมีการตั้งค่างานตัวกำหนดเวลาให้ทำงานเมื่อผู้ใช้เข้าสู่ระบบ ไม่มีพรอมต์กะพริบสำหรับสคริปต์ที่เริ่มต้นในเซสชันคอนโซล 0 เท่านั้น (ไม่ว่าผู้ใช้จะเข้าสู่ระบบใดก็ตาม)

    -NoProfile

    — เพิ่มตัวเลือกนี้หากสคริปต์สามารถทำงานได้โดยไม่มีโปรไฟล์ผู้ใช้ ป้องกันไม่ให้โหลดโปรไฟล์ผู้ใช้ ซึ่งจะทำให้การทำงานของสคริปต์เร็วขึ้น

  9. คุณสามารถเปิดใช้งานตัวเลือกที่มีประโยชน์ต่อไปนี้ได้ในแท็บ การตั้งค่า:
    อนุญาตให้ทำงานตามความต้องการ
    หากงานที่กำลังทำงานอยู่ไม่ สิ้นสุดเมื่อมีการร้องขอ บังคับให้หยุด
    อย่าเริ่มอินสแตนซ์ใหม่

  10. บันทึกการตั้งค่างาน ตรวจสอบว่างานใหม่ปรากฏในสแนปอิน ตัวกำหนดเวลางาน คลิกที่งานและเลือก เรียกใช้ เพื่อทดสอบ

    หากเรียกใช้สคริปต์ PowerShell สำเร็จ ข้อความจะแสดงในผลลัพธ์การเรียกใช้ครั้งล่าสุด:

    The operation completed sucessfully (0x0).

    หากต้องการบันทึกการดำเนินการทั้งหมดลงในไฟล์บันทึกข้อความ เราขอแนะนำให้คุณเพิ่มฟังก์ชันการบันทึกอย่างง่ายให้กับสคริปต์ PowerShell ซึ่งช่วยให้สามารถดูข้อมูลโดยละเอียดเกี่ยวกับการดำเนินการทั้งหมดที่ดำเนินการได้ตลอดเวลา

  11. ใช้แท็บ ประวัติ เพื่อดูประวัติและผลลัพธ์ของการเรียกใช้งานครั้งก่อน ประวัติงานจะไม่ถูกบันทึกตามค่าเริ่มต้นใน 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 เมื่อผู้ใช้เข้าสู่ระบบหรือปิด หรือเมื่อคอมพิวเตอร์เริ่มหรือปิดเครื่อง สคริปต์ดังกล่าวเรียกว่า สคริปต์การเข้าสู่ระบบ