বেশির ভাগ ইউজার এবং অ্যাডমিনিস্ট্রেটর taskschd.msc গ্রাফিক্যাল ইন্টারফেস কনসোল ব্যবহার করে উইন্ডোজে শিডিউলড টাস্ক তৈরি ও পরিচালনা করে। তবে বিভিন্ন স্ক্রিপ্ট এবং অটোমেটেড ফ্লোতে, পাওয়ারশেলের ফিচার ব্যবহার করে শিডিউলড টাস্ক তৈরি করা অনেক বেশি সুবিধাজনক। এই আর্টিকেলে আমরা দেখব কিভাবে পাওয়ারশেল ব্যবহার করে উইন্ডোজ শিডিউলার টাস্ক তৈরি ও পরিচালনা করা যায়।
পাওয়ারশেল দিয়ে উইন্ডোজে শিডিউলড টাস্ক পরিচালনা
উইন্ডোজ ১০/উইন্ডোজ সার্ভার ২০১৬-এ শিডিউলড টাস্ক পরিচালনার জন্য ScheduledTasks পাওয়ারশেল মডিউল ব্যবহার করা হয়। মডিউলের কামডলেটগুলো লিস্ট করতে পারেন:
Get-Command -Module ScheduledTasks
- Disable-ScheduledTask
- Enable-ScheduledTask
- Export-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
- Start-ScheduledTask
- Stop-ScheduledTask
- Unregister-ClusteredScheduledTask
- Unregister-ScheduledTask
schtasks.exe ব্যবহার হতো।
উইন্ডোজ পাওয়ারশেল দিয়ে শিডিউলড টাস্ক তৈরি
আধুনিক পাওয়ারশেল ভার্সনগুলিতে (পাওয়ারশেল ৩.০ থেকে শুরু করে উইন্ডোজ সার্ভার ২০১২/উইন্ডোজ ৮-এ), New-ScheduledTaskTrigger এবং Register-ScheduledTask কামডলেট ব্যবহার করে শিডিউলড টাস্ক তৈরি করা যায়।
মান লিন, আমাদের একটি শিডিউলড টাস্ক তৈরি করতে হবে যা স্টার্টআপে (বা নির্দিষ্ট সময়ে) চালু হবে এবং কিছু পাওয়ারশেল স্ক্রিপ্ট বা কমান্ড এক্সিকিউট করবে। StartupScript1 নামে একটি শিডিউলড টাস্ক তৈরি করি। এই টাস্কটি প্রতিদিন সকাল ১০টায় পাওয়ারশেল স্ক্রিপ্ট ফাইল C:\PS\StartupScript.ps1 চালাবে। টাস্কটি উন্নত সুবিধা (চেকবক্স "Run with highest privileges") সহ SYSTEM একাউন্টে এক্সিকিউট হবে।
$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
যদি টাস্ক সফলভাবে তৈরি হয়, তবে "Ready" স্ট্যাটাস দেখাবে।
আপনার পাওয়ারশেল স্ক্রিপ্ট নির্দিষ্ট শিডিউলে চলবে। যদি আপনার কম্পিউটারে পাওয়ারশেল এক্সিকিউশন পলিসি সক্রিয় থাকে যা PS1 স্ক্রিপ্ট এক্সিকিউশন বাধা দেয়, তবে শিডিউলড টাস্ক থেকে পাওয়ারশেল স্ক্রিপ্ট –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 কনসোল খুলে নিশ্চিত করুন যে Task Scheduler Library-তে নতুন শিডিউলার টাস্কটি আছে।
পাওয়ারশেল ২.০-এ (উইন্ডোজ ৭, উইন্ডোজ সার্ভার ২০০৮ R2), পাওয়ারশেল থেকে শিডিউলড টাস্ক তৈরি করতে Schedule.Service COM ইন্টারফেস ব্যবহার করতে হয় (অথবা পাওয়ারশেল ভার্সন আপডেট করুন)। এই উদাহরণে, আমরা একটি শিডিউলড টাস্ক তৈরি করব যা স্টার্টআপে নির্দিষ্ট পাওয়ারশেল স্ক্রিপ্ট ফাইল এক্সিকিউট করবে। টাস্কটি NT AUTHORITY\SYSTEM প্রivilেজে করা হবে।
$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)
পাওয়ারশেল দিয়ে শিডিউলড টাস্ক দেখা ও চালানো
উইন্ডোজে সব সক্রিয় শিডিউলড টাস্ক লিস্ট করতে কমান্ড:
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 কামডলেট ব্যবহার করুন:
$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 ফাইল ব্যবহার করে শিডিউলড টাস্ক এক্সপোর্ট ও ইমপোর্ট করা
পাওয়ারশেল যেকোনো শিডিউলড টাস্কের বর্তমান সেটিংস টেক্সট XML ফাইলে এক্সপোর্ট করতে দেয়। সুতরাং আপনি যেকোনো টাস্কের প্যারামিটার এক্সপোর্ট করে অন্য কম্পিউটারগুলিতে ডিপ্লয় করতে পারেন। টাস্ক এক্সপোর্ট করা যায় Task Scheduler GUI এবং পাওয়ারশেল কনসোল দুয়েটো থেকে।
StartupScript নামের টাস্কটি StartupScript.xml ফাইলে এক্সপোর্ট করার কমান্ড:
Export-ScheduledTask StartupScript | out-file c:\tmp\StartupScript.xml
Export-ScheduledTask কামডলেট পাওয়ারশেল ২.০-এ উপলব্ধ নেই, তাই উইন্ডোজ ৭ / উইন্ডোজ সার্ভার ২০০৮ R2-এ বিল্ট-ইন টুল schtasks ব্যবহার করে টাস্ক সেটিংস এক্সপোর্ট করা ভালো এবং ফলাফল টেক্সট ফাইলে রিডাইরেক্ট করুন:
schtasks /query /tn "NewPsTask" /xml >> "c:\tmp\NewPsTask.xml"
শিডিউলড টাস্ক সেটিংস XML ফাইলে এক্সপোর্ট হলে, এটি যেকোনো নেটওয়ার্ক কম্পিউটারে GUI, SchTasks.exe বা পাওয়ারশেল দিয়ে ইমপোর্ট করা যায়।
Register-ScheduledTask কামডলেট XML ফাইল থেকে টাস্ক সেটিংস ইমপোর্ট করে রেজিস্টার করতে সাহায্য করে:
Register-ScheduledTask -Xml (Get-Content “\\mun-fs01\public\NewPsTask.xml” | out-string) -TaskName "NewPsTask"
পাওয়ারশেল ২.০-এ (উইন্ডোজ ৭/সার্ভার ২০০৮ R2), schtasks টুল ব্যবহার করে টাস্ক ইমপোর্ট করা সহজ। প্রথম কমান্ড নতুন টাস্ক তৈরি করে। দ্বিতীয়টি এটিকে অবিলম্বে চালাবে (ট্রিগার অপেক্ষা না করে)।
schtasks /create /tn "NewPsTask" /xml "\\Srv1\public\NewPsTask.xml" /ru corp\skrutapal /rp Pa$$w0rd
schtasks /Run /TN "NewPsTask"
দ্রষ্টব্য, এই উদাহরণে টাস্ক চালানোর জন্য ব্যবহৃত একাউন্টের ক্রেডেনশিয়াল ব্যবহার করা হয়েছে। যদি ক্রেডেনশিয়াল স্পেসিফাই না করা হয় (কারণ সেগুলো জবে সংরক্ষিত নয়), তবে ইমপোর্ট করার সময় সেগুলো চায়া হবে।