আপনি Windows সার্ভিস ম্যানেজ করতে পারেন শুধু services.msc স্ন্যাপ-ইন বা sc.exe কমান্ড লাইন টুল দিয়ে নয়, বরং PowerShell ব্যবহার করেও। এই লেখায় আমরা PowerShell দিয়ে Windows সার্ভিস ম্যানেজ করার বিভিন্ন সিনেরিও দেখব।
Windows Services ম্যানেজ করার PowerShell কমান্ডলেটসমূহ
Windows সার্ভিসের স্টেট দেখার এবং ম্যানেজ করার জন্য আটটি বেসিক Service কমান্ডলেট রয়েছে। সার্ভিস ম্যানেজমেন্ট কমান্ডলেটের পুরো তালিকা পেতে এই কমান্ড চালান:
Get-Help \*-Service

- Get-Service — লোকাল বা রিমোট কম্পিউটারের সার্ভিসগুলো রানিং বা স্টপড স্টেটে পাওয়ার অনুমতি দেয়;
- New-Service – একটি সার্ভিস তৈরি করে। কমান্ডলেটটি Windows সার্ভিসের জন্য রেজিস্ট্রি এবং সার্ভিস ডেটাবেসে নতুন এন্ট্রি তৈরি করে;
- Restart-Service – একটি সার্ভিস রিস্টার্ট করে। কমান্ডলেটটি Windows Service Controller-এ রিস্টার্ট মেসেজ পাঠায়;
- Resume-Service – একটি সার্ভিস রিজিউম করে। কমান্ডলেটটি Windows Service Manager-এ রিজিউম মেসেজ পাঠায়;
- Set-Service — লোকাল বা রিমোট সার্ভিসের সেটিংস পরিবর্তন করে, এর স্টেট, ডেসক্রিপশন, ডিসপ্লে নাম বা স্টার্টআপ মোড সহ। এই কমান্ডলেট ব্যবহার করে সার্ভিস স্টার্ট, স্টপ বা সাসপেন্ড ও করা যায়;
- Start-Service – একটি সার্ভিস স্টার্ট করে;
- Stop-Service – একটি সার্ভিস স্টপ করে (কমান্ডলেটটি Windows Service Manager-এ স্টপিং মেসেজ পাঠায়);
- Suspend-Service – একটি সার্ভিস সাসপেন্ড করে। একটি সাসপেন্ডেড সার্ভিস এখনও রান করছে, কিন্তু কিছু করছে না যতক্ষণ না Resume-Service কমান্ডলেট দিয়ে রিজিউম করা হয়।
এক নির্দিষ্ট কমান্ডলেটের বিস্তারিত ডেসক্রিপশন এবং ব্যবহারের উদাহরণ Get-Help দিয়ে পাওয়া যায়:
Get-Help Start-Service

Get-Service দিয়ে Windows Service স্ট্যাটাস চেক করা
আপনি Get-Service কমান্ডলেট ব্যবহার করে লোকাল বা রিমোট কম্পিউটারের সার্ভিসের তালিকা এবং তাদের স্টেট (Running/Stopped) পেতে পারেন। -Name প্যারামিটার সার্ভিস নাম দিয়ে সিলেক্ট করতে দেয়। সার্ভিস নাম 와াইল্ডকার্ড ক্যারেক্টার * ব্যবহার করে নির্দিষ্ট করা যায়।

যদি আপনি সঠিক সার্ভিস নাম না জানেন, তবে এর ডিসপ্লে নাম দিয়ে খুঁজে বের করতে পারেন -DisplayName প্যারামিটার ব্যবহার করে। আপনি ভ্যালুর লিস্ট এবং 와াইল্ডকার্ড ব্যবহার করতে পারেন।

Get-Service কমান্ডলেট -ComputerName প্যারামিটার সহ ব্যবহার করে রিমোট কম্পিউটারের সার্ভিস স্ট্যাটাস পাওয়া যায়। আপনি একসাথে একাধিক রিমোট কম্পিউটারের সার্ভিস স্ট্যাটাস কোয়েরি করতে পারেন তাদের নাম কমা দিয়ে আলাদা করে। উদাহরণস্বরূপ, নিচের কমান্ড ny-prnt1 এবং ny-prnt2 রিমোট কম্পিউটারে Spooler সার্ভিসের স্ট্যাটাস পাবে।
Get-Service spooler –ComputerName ny-prnt1,ny-prnt2
Status Name DisplayName ------ ---- ----------- Running spooler Print Spooler Stopped spooler Print Spooler
একটি সার্ভিসের সব প্রপার্টি দেখাতে Select-Object কমান্ডলেট ব্যবহার করুন:
Get-Service spooler | Select-Object *

Select-Object কমান্ডলেট নির্দিষ্ট সার্ভিস প্রপার্টি পাওয়ার অনুমতি দেয়। উদাহরণস্বরূপ, আপনি Spooler সার্ভিসের নাম, স্ট্যাটাস এবং উপলব্ধ অপশন দেখতে চান:
Get-Service Spooler | Select DisplayName,Status,ServiceName,Can*

Get-Service কমান্ডলেটের দুটি প্যারামিটার রয়েছে যেগুলো সার্ভিস ডিপেন্ডেন্সি দেখাতে দেয়:
- -DependentServices দিয়ে দেয়া সার্ভিসের ওপর ডিপেন্ডেন্ট সার্ভিসগুলো দেখানো হয়
- -RequiredServices দিয়ে দেয়া সার্ভিস যেগুলোর ওপর ডিপেন্ড করে সেগুলো দেখানো হয়
নিচের কমান্ড Spooler সার্ভিস স্টার্ট করার জন্য প্রয়োজনীয় সার্ভিসগুলো দেখাবে:
Get-Service –Name Spooler -RequiredServices

নিচের কমান্ড Spooler-এ ডিপেন্ডент সার্ভিসগুলো দেখাবে:
Get-Service –Name Spooler -DependentServices

যদি আপনি নির্দিষ্ট স্টেট বা প্যারামিটারवाले সার্ভিস খুঁজতে চান, Where-Object কমান্ডলেট ব্যবহার করুন। উদাহরণস্বরূপ, রানিং সার্ভিসের তালিকা পাওয়ার জন্য:
Get-Service | Where-Object {$_.status -eq 'running'}

Manual স্টার্টআপ টাইপवाले সার্ভিসগুলো দেখাতে এই কমান্ড চালান:
Get-Service | Where-Object {$_.starttype -eq 'Manual'}

একটি নির্দিষ্ট Windows সার্ভিস বর্তমান কম্পিউটারে আছে কিনা চেক করার জন্য নিচের PowerShell স্ক্রিপ্ট ব্যবহার করুন:
if (Get-Service "ServiceTest" -ErrorAction SilentlyContinue)
{
Write-host "ServiceTest exists"
}
PowerShell দিয়ে সার্ভিস স্টপ, স্টার্ট, বা রিস্টার্ট করা
আপনি Stop-Service কমান্ডলেট ব্যবহার করে একটি সার্ভিস স্টপ করতে পারেন। Spooler স্টপ করতে কমান্ড চালান:
Stop-Service -Name spooler
Stop-Service কমান্ডলেট এক্সিকিউশনের পর কিছুই দেখায় না। রেজাল্ট দেখতে -PassThru প্যারামিটার ব্যবহার করুন।

দয়া করে লক্ষ্য করুন যে সব সার্ভিস স্টপ করা যায় না। যদি কোনো ডিপেন্ডেন্ট সার্ভিস থাকে, তাহলে এরর দেখাবে:
Cannot stop service because it has dependent services. It can only be stopped if force flag set.

একটি সার্ভিস ফোর্সফুলি স্টপ করতে –Force প্যারামিটার ব্যবহার করুন। মনে রাখবেন সব ডিপেন্ডেন্ট সার্ভিসও স্টপ হয়ে যাবে:
Stop-Service samss –Force -Passthru
নিচের কমান্ড স্পেসিফাইড সার্ভিসগুলো (bits, spooler) স্টপ করবে যদি সেগুলো “Running” স্টেটে থাকে:
get-service bits,spooler | where {$_.status -eq 'running'} | stop-service –passthru

কখনো কখনো সার্ভিস “Stopping” স্টেটে আটকে যায় এবং সেগুলো ফোর্সফুলি কিল করতে হয়।
Start-Service কমান্ডলেট একটি স্টপড সার্ভিস স্টার্ট করে:
Start-Service -Name spooler -PassThru

একটি সার্ভিস স্টার্ট হবে না, যদি এর কোনো ডিপেন্ডেন্ট সার্ভিস স্টপড থাকে। সেগুলো খুঁজে বের করে স্টার্ট করতে নিচের PowerShell one-liner ব্যবহার করুন:
get-service samss | Foreach { start-service $_.name -passthru; start-service $_.DependentServices -passthru}

Suspend-Servce কমান্ডলেট সার্ভিস পজ করতে পারে যদি সেগুলো এই স্টেট সাপোর্ট করে। একটি সার্ভিস পজ করা যায় কিনা জানতে Get-Service কমান্ডলেট CanPauseAndContinue প্রপার্টি সহ ব্যবহার করুন।
Get-Service samss | Format-List name, canpauseandcontinue

পজ করা যাওয়া সব সার্ভিসের তালিকা দেখাতে এই কমান্ড চালান:
Get-Service | Where-Object {$_.canpauseandcontinue -eq "True"}

SQLBrowser সার্ভিস সাসপেন্ড করুন:
Suspend-Service -Name SQLBrowser

একটি সাসপেন্ডেড সার্ভিস রিজিউম করতে Resume-Service কমান্ডলেট ব্যবহার করুন:
Resume-Service -Name SQLBrowser

নিচের কমান্ড সব সাসপেন্ডেড সার্ভিস রিজিউম করবে:
get-service | where-object {$_.Status -eq "Paused"} | resume-service
Restart-Service কমান্ডলেট একটি সার্ভিস রিস্টার্ট করবে:
Restart-Service -Name spooler

এই কমান্ড কম্পিউটারের সব স্টপড নেটওয়ার্ক সার্ভিস স্টার্ট করবে:
get-service net* | where-object {$_.Status -eq "Stopped"} | restart-service
এই কমান্ডগুলোর -ComputerName প্যারামিটার নেই, কিন্তু আপনি Invoke-Command কমান্ডলেট বা পাইপ ব্যবহার করে রিমোট কম্পিউটারে চালাতে পারেন।
উদাহরণস্বরূপ, রিমোট কম্পিউটার ny-prnt1-এ প্রিন্ট স্পুলার রিস্টার্ট করতে কমান্ড চালান:
Get-Service Spooler -ComputerName ny-prnt1 | Start-Service
ডিফল্টভাবে শুধু অ্যাডমিনিস্ট্রেটররা Windows সার্ভিস স্টার্ট/স্টপ করতে পারে, কিন্তু আপনি নন-অ্যাডমিন ইউজারকে একটি নির্দিষ্ট সার্ভিসে স্টার্ট/স্টপ/রিস্টার্ট পারমিশন দিতে পারেন।
Set-Service ব্যবহার করে সার্ভিস সেটিংস পরিবর্তন করা
Set-Service কমান্ডলেট আপনাকে লোকাল বা রিমোট কম্পিউটারের সার্ভিসের যেকোনো প্যারামিটার বা সেটিংস পরিবর্তন করতে দেয়। যেহেতু সার্ভিসের স্টেট একটি প্রপার্টি, তাই এই কমান্ডলেট ব্যবহার করে সার্ভিস স্টার্ট, স্টপ বা সাসপেন্ড করা যায়। Set-Service-এ -StartupType প্যারামিটার রয়েছে যা সার্ভিসের স্টার্টআপ টাইপ পরিবর্তন করতে দেয়।
Spooler-এর স্টার্টআপ টাইপ Automatic-এ পরিবর্তন করি:
Set-Service spooler –startuptype automatic –passthru

আপনি Manual স্টার্টআপ টাইপ সেট করতে পারেন:
Set-Service spooler –startuptype manual –passthru

PowerShell দিয়ে Windows Service তৈরি বা ডিলিট করা
New-Service – Windows-এ নতুন সার্ভিস তৈরি করার কমান্ডলেট। নতুন সার্ভিসের নাম এবং এক্সিকিউটেবল ফাইল নির্দিষ্ট করুন (আপনি PowerShell স্ক্রিপ্টও Windows সার্ভিস হিসেবে রান করতে পারেন)।
TestSvc নামে একটি নতুন সার্ভিস তৈরি করি:
new-service -name TestSvc -binaryPathName "C:\WINDOWS\System32\svchost.exe -k netsvcs"

Get-WmiObject কমান্ডলেট ব্যবহার করে সার্ভিসের স্টার্টআপ টাইপ এবং ডেসক্রিপশন সম্পর্কে তথ্য পান।
get-wmiobject win32_service -filter "name='testservice'"

নতুন সার্ভিসের সেটিংস নিচের কমান্ড দিয়ে পরিবর্তন করতে পারেন:
Set-Service -Name TestSvc -Description ‘My Service’ -StartupType Manual

একটি সার্ভিস ডিলিট করতে এই কমান্ড চালান:
(Get-WmiObject win32_service -Filter ″name=′TestSvc′″).delete()
Windows Service রান করার ইউজার অ্যাকাউন্ট পরিবর্তন করা
আপনি PowerShell ব্যবহার করে সার্ভিস স্টার্ট করতে ব্যবহৃত ইউজার অ্যাকাউন্ট পরিবর্তন করতে পারেন। TestSvc-কে স্টার্ট করতে ব্যবহৃত অ্যাকাউন্টের নাম পান:
get-wmiobject win32_service -filter "name='TestSvc'" | Select name,startname

Windows Service-এর জন্য ইউজারনেম এবং পাসওয়ার্ড পরিবর্তন করতে নিচের কমান্ডগুলো চালান:
$svc = get-wmiobject win32_service -filter "name='TestSvc'"
$svc.GetMethodParameters("change")
Change() মেথডের প্যারামিটার লিস্ট দেখানো হয়েছে। কোথায় StartName এবং StartPassword প্যারামিটার আছে তা গণনা করুন: সেগুলো যথাক্রমে ২০তম এবং ২১তম paik-এ অবস্থিত।

$svc | Invoke-WmiMethod -Name Change –ArgumentList @ ($null,$null,$null,$null,$null,$null,$null, $null,$null,$null,$null,$null,$null,$null,$null,$null, $null,$null,$null,"Administrator","!123Pa$$w0rd")
অথবা আপনি gMSA অ্যাকাউন্টের নাম দিতে পারেন (এই কেসে অ্যাকাউন্ট পাসওয়ার্ড নির্দিষ্ট করা হয় না)।
আপনি দেখতে পাচ্ছেন, PowerShell Windows সার্ভিস ম্যানেজ করা সহজ করে দেয়। আপনি সার্ভিস তৈরি, স্টপ, স্টার্ট বা রিজিউম করতে পারেন, এবং তাদের প্রপার্টি পরিবর্তন করতে পারেন। অধিকাংশ কমান্ডলেট রিমোট কম্পিউটারে সার্ভিস ম্যানেজ করতে দেয়।