ตั้งเวลาให้งานทำงานอัตโนมัติด้วย Task Scheduler บน Windows Server
Task Scheduler คือเครื่องมือตั้งเวลาในตัวของ Windows เทียบได้กับ Cron บน Linux ใช้สั่งให้สคริปต์หรือโปรแกรมทำงานเองตามเวลา เช่น ลบไฟล์ Log เก่าทุกคืน สำรองโฟลเดอร์ข้อมูล รีสตาร์ต Service ประจำสัปดาห์ หรือรันงานเมื่อเครื่องบูตเสร็จ บทความนี้ใช้ตัวอย่างจริงคือสคริปต์ PowerShell ที่ลบ Log ของ IIS ที่เก่ากว่า 30 วัน แล้วตั้งให้รันทุกวันเวลา 02:30 น. ทั้งผ่านหน้าจอและผ่าน Command Line
สิ่งที่ต้องเตรียม
- Windows Server 2019 หรือ 2022 และบัญชีในกลุ่ม Administrators
- สคริปต์หรือโปรแกรมที่ต้องการรัน และทดสอบรันด้วยมือสำเร็จแล้ว
- ตรวจว่าเวลาและ Time Zone ของเซิร์ฟเวอร์ถูกต้อง (ดูได้ที่ Settings, Time & Language หรือคำสั่ง
tzutil /g)
ขั้นตอนที่ 1: เตรียมสคริปต์ตัวอย่าง
สร้างโฟลเดอร์ C:\Scripts แล้วสร้างไฟล์ C:\Scripts\cleanup-iis-logs.ps1 ด้วย Notepad
# ลบไฟล์ Log ของ IIS ที่เก่ากว่า 30 วัน และบันทึกผลไว้ในไฟล์
$LogRoot = 'C:\inetpub\logs\LogFiles'
$Days = 30
$Report = 'C:\Scripts\logs\cleanup-iis-logs.log'
New-Item -ItemType Directory -Force -Path (Split-Path $Report) | Out-Null
$cutoff = (Get-Date).AddDays(-$Days)
$old = Get-ChildItem -Path $LogRoot -Recurse -File -Filter *.log |
Where-Object { $_.LastWriteTime -lt $cutoff }
$old | Remove-Item -WhatIf
"{0} found {1} file(s) older than {2} days" -f (Get-Date -Format s), $old.Count, $Days |
Add-Content -Path $Report
ในรอบแรกคำสั่ง Remove-Item มี -WhatIf ไว้ ทำให้สคริปต์แสดงเพียงว่าจะลบไฟล์ใด แต่ยังไม่ลบจริง ทดสอบรันด้วย PowerShell แบบ Administrator
powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\Scripts\cleanup-iis-logs.ps1
ผลลัพธ์จะเป็นบรรทัด What if: Performing the operation "Remove File" on target ... สำหรับแต่ละไฟล์ ตรวจว่ารายการถูกต้อง แล้วจึงลบ -WhatIf ออก การลบไฟล์ด้วยสคริปต์ย้อนกลับไม่ได้ ถ้าไม่แน่ใจ ให้สำรองโฟลเดอร์ก่อน
ขั้นตอนที่ 2: สร้าง Task ด้วยหน้าจอ Task Scheduler
เปิด Task Scheduler จาก Server Manager เมนู Tools หรือพิมพ์ taskschd.msc ในหน้าต่าง Run แนะนำให้ใช้ Create Task... ในแผง Actions แทน Create Basic Task เพราะตั้งค่าได้ครบกว่า ควรสร้างโฟลเดอร์ของตัวเอง (คลิกขวาที่ Task Scheduler Library เลือก New Folder) เพื่อแยก Task ของคุณออกจาก Task ของระบบ
แท็บ General
- Name:
Cleanup IIS Logs - Security options: คลิก Change User or Group... พิมพ์
SYSTEMแล้วกด OK สำหรับงานดูแลเครื่องที่ไม่ต้องเข้าถึงไฟล์บนเครื่องอื่น หรือเลือกบัญชีผู้ใช้เฉพาะ แล้วเลือก Run whether user is logged on or not - เลือก Run with highest privileges
- Configure for: เลือก Windows Server 2019 หรือ Windows Server 2022 ตามเครื่อง (ชื่อในรายการอาจต่างกันตามรุ่น)
แท็บ Triggers
- กด New... ช่อง Begin the task เลือก On a schedule
- เลือก Daily ตั้งเวลาเริ่ม
2:30:00 AMและ Recur every1days - ตรวจว่าเลือก Enabled ไว้ที่ด้านล่าง แล้วกด OK
ตัวเลือก Begin the task อื่นที่ใช้บ่อย ได้แก่ At startup (รันเมื่อเครื่องบูต), At log on และ On an event (รันเมื่อเกิด Event ที่กำหนดใน Event Log)
แท็บ Actions
- กด New... Action เลือก Start a program
- Program/script:
powershell.exe - Add arguments:
-NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\cleanup-iis-logs.ps1" - Start in:
C:\Scripts(ไม่ต้องใส่เครื่องหมายคำพูดในช่องนี้)
ห้ามใส่ path ของสคริปต์ในช่อง Program/script โดยตรง เพราะไฟล์ .ps1 ไม่ได้ถูกตั้งให้รันด้วย PowerShell โดยค่าเริ่มต้น ถ้าเป็นไฟล์ .bat หรือ .cmd ใส่ path ของไฟล์ในช่อง Program/script ได้เลย
แท็บ Conditions และ Settings
- Conditions: เอาเครื่องหมายออกจาก Start the task only if the computer is on AC power ซึ่งไม่เกี่ยวกับเซิร์ฟเวอร์และบางครั้งทำให้ Task ไม่ทำงาน
- Settings: เลือก Run task as soon as possible after a scheduled start is missed เพื่อให้รันตามหลังถ้าเครื่องปิดอยู่ในเวลาที่กำหนด
- Settings: Stop the task if it runs longer than ตั้งเป็นเวลาที่เหมาะกับงาน เช่น 1 hour เพื่อไม่ให้สคริปต์ที่ค้างรันอยู่ตลอดไป
- Settings: If the task is already running เลือก Do not start a new instance
กด OK ถ้าเลือกบัญชีผู้ใช้ที่ไม่ใช่ SYSTEM ระบบจะถามรหัสผ่านของบัญชีนั้นเพื่อเก็บไว้ใช้รัน
ขั้นตอนที่ 3: หรือสร้าง Task ด้วย Command Line
วิธีนี้เหมาะกับการตั้งหลายเครื่องให้เหมือนกัน ใช้ PowerShell แบบ Administrator
$action = New-ScheduledTaskAction -Execute 'powershell.exe' `
-Argument '-NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\cleanup-iis-logs.ps1"' `
-WorkingDirectory 'C:\Scripts'
$trigger = New-ScheduledTaskTrigger -Daily -At 2:30am
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -ExecutionTimeLimit (New-TimeSpan -Hours 1) `
-MultipleInstances IgnoreNew
Register-ScheduledTask -TaskName 'Cleanup IIS Logs' -Action $action -Trigger $trigger `
-Settings $settings -User 'SYSTEM' -RunLevel Highest
หรือใช้คำสั่ง schtasks ที่มีใน Windows ทุกรุ่นจาก Command Prompt
schtasks /Create /TN "Cleanup IIS Logs" /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\Scripts\cleanup-iis-logs.ps1" /SC DAILY /ST 02:30 /RU SYSTEM /RL HIGHEST
ผลลัพธ์ที่ถูกต้องคือข้อความ SUCCESS: The scheduled task "Cleanup IIS Logs" has successfully been created.
ตรวจสอบผลลัพธ์
- ใน Task Scheduler คลิกขวาที่ Task เลือก Run เพื่อทดสอบทันที
- กด F5 เพื่อรีเฟรช คอลัมน์ Last Run Result ควรเป็น
The operation completed successfully. (0x0) - เปิดไฟล์
C:\Scripts\logs\cleanup-iis-logs.logต้องมีบรรทัดใหม่พร้อมเวลาที่รัน - ถ้าแท็บ History แสดงว่าปิดอยู่ ให้คลิก Enable All Tasks History ในแผง Actions เพื่อเก็บประวัติการทำงาน
ตรวจด้วย PowerShell ได้เช่นกัน
Get-ScheduledTaskInfo -TaskName 'Cleanup IIS Logs'
ความหมายของรหัสผลลัพธ์ที่พบบ่อย
| รหัส | ความหมาย |
|---|---|
0x0 | สำเร็จ |
0x1 | โปรแกรมหรือสคริปต์จบด้วยข้อผิดพลาด (Exit code 1) มักเป็นปัญหาในสคริปต์เอง หรือ path ผิด |
0x2 | หาไฟล์ที่ระบุไม่พบ |
0x41301 | Task กำลังทำงานอยู่ |
0x41303 | Task ยังไม่เคยรัน |
0x8007052E | ชื่อผู้ใช้หรือรหัสผ่านที่เก็บไว้ใน Task ไม่ถูกต้อง |
ปัญหาที่พบบ่อย
รันด้วยมือได้ แต่ตามเวลาไม่ทำงาน หรือได้ 0x1
สาเหตุที่พบบ่อยคือสคริปต์อ้างถึง path แบบสัมพัทธ์ ซึ่งเมื่อรันจาก Task Scheduler โฟลเดอร์ทำงานจะเป็น C:\Windows\System32 ให้ใส่ช่อง Start in หรือใช้ path เต็มในสคริปต์ อีกสาเหตุคือสคริปต์อ้างถึง Drive ที่ Map ไว้ เช่น Z:\ ซึ่งมีเฉพาะใน Session ของผู้ใช้ที่ล็อกอิน ให้ใช้ UNC path เช่น \\fileserver\backup แทน (ดู วิธีการ Map Drive บน Windows Server 2022) และบัญชี SYSTEM เข้าถึงไฟล์บนเครื่องอื่นในเครือข่ายไม่ได้ ถ้าต้องใช้ ให้รัน Task ด้วยบัญชีผู้ใช้ที่มีสิทธิ์บนปลายทาง
Task หยุดทำงานหลังเปลี่ยนรหัสผ่าน
Task ที่ใช้ Run whether user is logged on or not จะเก็บรหัสผ่านไว้ เมื่อเปลี่ยนรหัสผ่านบัญชี Task จะล้มเหลวด้วยรหัส 0x8007052E และอาจทำให้บัญชีถูกล็อกถ้าเปิด Account Lockout Policy ไว้ แก้โดยเปิด Properties ของ Task กด OK แล้วใส่รหัสผ่านใหม่
ต้องการดูรายละเอียดข้อผิดพลาดเพิ่มเติม
เปิด Event Viewer ที่ Applications and Services Logs, Microsoft, Windows, TaskScheduler, Operational จะเห็นทุกขั้นตอนของการเริ่มและจบ Task สำหรับสคริปต์ PowerShell การเพิ่ม Start-Transcript -Path C:\Scripts\logs\transcript.log -Append ไว้บรรทัดแรก และ Stop-Transcript ไว้บรรทัดสุดท้าย จะบันทึกทุกข้อความที่สคริปต์แสดง ช่วยหาสาเหตุได้ง่ายขึ้นมาก
งานที่มักตั้งเวลาควบคู่กันบน Windows Server คือการสำรองข้อมูล ดู สำรองข้อมูลด้วย Windows Server Backup หากติดปัญหาในการตั้งค่า ติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


