কম্পিউটার টিউটোরিয়াল

PowerShell: ফ্রি ডিস্ক স্পেস ও ডিস্ক ব্যবহার চেক করা

এই আর্টিকেলে আমরা দেখবো কিভাবে পাওয়ারশেল ব্যবহার করে লোকাল বা রিমোট উইন্ডোজ হোস্টে ফ্রি ডিস্ক স্পেস ও ডিস্ক ব্যবহার চেক করবেন। এছাড়াও, ফ্রি স্পেস থ্রেশহোল্ড অতিক্রম করলে অ্যাডমিনিস্ট্রেটরকে পপ-আপ নোটিফিকেশন বা ইমেইল দিয়ে 알림 দেবার পদ্ধতিও আলোচনা করব।

WMI ও PowerShell দিয়ে উইন্ডোজে ড্রাইভ ফ্রি স্পেস চেক করা

আপনি Win32_logicalDisk WMI ক্লাস ব্যবহার করে উইন্ডোজে লজিক্যাল ড্রাইভের তথ্য পেতে পারেন।

নিচের কমান্ড আপনার কম্পিউটারের সব লজিক্যাল ড্রাইভের সকল তথ্য দেখাবে:

Get-WmiObject -Class Win32_LogicalDisk

যদি আপনি নতুন PowerShell Core 7.x ব্যবহার করেন, তবে মনে রাখবেন WMI এই ভার্সনে সাপোর্টেড নন (PowerShell Core .Net Core-ভিত্তিক)। Get-WmiObject কমান্ড চালালে এরর আসবে: "The term 'Get-WmiObject' is not recognized..."। WMI-এর পরিবর্তে CIM ব্যবহার করুন, উদাহরণস্বরূপ:

Get-CimInstance win32_logicaldisk

FreeSpace প্রপার্টিতে প্রতিটি ড্রাইভে বাইট 단위로 অবশিষ্ট ফ্রি স্পেস থাকে। সুবিধার্থে এটি GB-এ কনভার্ট করে এবং প্রতিটি লজিক্যাল ডিস্কে ফ্রি স্পেসের শতাংশ (ফ্রি স্পেস ও টোটাল ডিস্ক সাইজের অনুপাত) দেখাতে পারেন। নিচের পাওয়ারশেল স্ক্রিপ্টটি ব্যবহার করুন:

Get-WmiObject -Class Win32_LogicalDisk |
Select-Object -Property DeviceID, VolumeName, @{Label='FreeSpace (Gb)'; expression={($_.FreeSpace/1GB).ToString('F2')}},
@{Label='Total (Gb)'; expression={($_.Size/1GB).ToString('F2')}},
@{label='FreePercent'; expression={[Math]::Round(($_.freespace / $_.size) * 100, 2)}} | ft

স্ক্রিপ্টটি লজিক্যাল ড্রাইভের তালিকা, তাদের সাইজ, ও ফ্রি স্পেসের শতাংশ দেখায়।

PowerShell Core-এ এই স্ক্রিপ্ট ব্যবহার করতে শুধু Get-WmiObject-কে Get-CimInstance- দিয়ে রিপ্লেস করুন।

যদি আপনি শুধু ডিস্কের ফ্রি স্পেসের তথ্য দেখানোর পরিবর্তে কিছু অ্যাকশন নিতে চান (ইমেইল পাঠানো বা পপ-আপ মেসেজ দেখানো) যখন ফ্রি স্পেস নির্দিষ্ট থ্রেশহোল্ডের নিচে চলে যায়, তবে নিচের পাওয়ারশেল স্ক্রিপ্ট ব্যবহার করুন:

$percentWarning = 20
$percentCritcal = 5
$ListDisk = Get-WmiObject -Class Win32_LogicalDisk
Foreach($Disk in $ListDisk){
 if ($Disk.size -ne $NULL) {
 $DiskFreeSpace = ($Disk.freespace/1GB).ToString('F2')
 $DiskFreeSpacePercent = [Math]::Round(($Disk.freespace/$Disk.size) * 100, 2)
 if($DiskFreeSpacePercent -lt $percentWarning){
 $Message= "Warning!"
 if($DiskFreeSpacePercent -lt $percentCritcal){
 $Message= "Alert!"
 }
 $wshell = New-Object -ComObject Wscript.Shell
 $Output = $wshell.Popup("Disk $($Disk.DeviceID) has only $DiskFreeSpace GB of free space left",0,$Message,48)
 }
 }
}

এই স্ক্রিপ্টটি ডিস্কে অবশিষ্ট ফ্রি স্পেসের থ্রেশহোল্ড ভ্যালু সেট করে — ৫% এবং ২০%। যদি যেকোনো ডিস্কে ফ্রি স্পেস নির্দিষ্ট মান থেকে কম হয়, তবে একটি মডাল ইনফরমেশন উইন্ডো দেখায়। আপনি এটি পপ-আপ নোটিফিকেশন হিসেবে দেখাতে পারেন বা সরাসরি Disk Cleanup টুল (cleanmgr.exe) চালাতে পারেন।

যদি আপনি সমস্যা অ্যাডমিনিস্ট্রেটরকে ইমেইল করতে চান, তবে SMTP সার্ভারের মাধ্যমে Send-MailMessage কমান্ডলেট দিয়ে ইমেইল পাঠাতে পারেন (এটি এক্সচেঞ্জ হোস্ট বা যেকোনো অন্য SMTP সার্ভিস, এমনকি বিল্ট-ইন উইন্ডোজ সার্ভার SMTP রোলও হবে):

Send-MailMessage -To "srv_admin@woshub.com" -From "$env:computername@woshub.com" -Subject "Insufficient disk space on server $env:computername" -Body "Disk $($Disk.DeviceID) has only $DiskFreeSpace GB left" -Credential (Get-Credential) -SmtpServer smtp.woshub.com -Port 587

এই উদাহরণে, SMTP হোস্টে কানেক্ট করার জন্য ক্রেডেনশিয়াল ইন্টারেক্টিভলি দিতে হবে। আপনি আপনার SMTP হোস্ট কনফিগার করতে পারেন যাতে এটি বিশ্বস্ত হোস্ট থেকে প্রমাণীকরণ ছাড়া মেসেজ গ্রহণ করে, বা ফাইলে সংরক্ষিত ক্রেডেনশিয়াল ব্যবহার করে SMTP প্রমাণীকরণ কনফিগার করতে পারেন (Managed Service Accounts ব্যবহার করে ইমেইল পাঠানো সম্ভব নন)।

আপনি টাস্ক স্কেডিউলার ব্যবহার করে পাওয়ারশেল স্ক্রিপ্ট নিয়মিত চালাতে পারেন বা এটি উইন্ডোজ সার্ভিস হিসেবে কনফিগার করতে পারেন। এই উইন্ডোজ হোস্টে পর্যাপ্ত ফ্রি স্পেস না থাকলে অ্যাডমিনিস্ট্রেটরকে নোটিফিকেশন যাবে।

PowerShell দিয়ে রিমোট উইন্ডোজ হোস্ট থেকে ফ্রি ডিস্ক স্পেস পেতে

Invoke-Command কমান্ডলেট ব্যবহার করে রিমোট কম্পিউটারে PS স্ক্রিপ্ট চালিয়ে অবশিষ্ট ফ্রি স্পেস চেক করা যায়।

Invoke-Command -ComputerName srv01,srv02,srv03 -FilePath "C:\PS\checkfreespace.ps1"

যদি যেসব সার্ভারের ফ্রি স্পেস চেক করতে চান সেগুলো আপনার ডোমেনে থাকে, তবে Active Directory থেকে Get-ADComputer কমান্ডলেট দিয়ে সার্ভারদের তালিকা পেয়ে প্রতিটি হোস্টে স্ক্রিপ্ট চালাতে পারেন:

$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows Server*" -and enabled -eq "true"').Name
Invoke-Command -ComputerName $computers -FilePath "C:\PS\checkfreespace.ps1" -ErrorAction SilentlyContinue

রিমোট কম্পিউটার থেকে WMI ডেটা পেতে RemoteWMI-ও ব্যবহার করতে পারেন:

Get-WmiObject -Class Win32_logicalDisk -ComputerName srv01,srv02,srv03

এই গাইড ডিস্ক স্পেস মনিটর করার সবচেয়ে সহজ স্ব-निর্মিত সমাধান বর্ণনা করেছে। যদি অনেক হোস্ট মনিটর করতে হয়, তবে পূর্ণ-वিশিষ্ট মনিটরিং সিস্টেম (যেমন Zabbix, Icinga, PRTG, Nagios ইত্যাদি) ব্যবহার করা ভালো।

  1. উইন্ডোজ ১০-এ হার্ড ডিস্ক স্পেস মুক্ত করার ১০টি প্রমাণিত কৌশল

  2. Mac-এ ডিস্ক স্পেস ফ্রি করুন: দ্রুত ও নিরাপদ পদ্ধতি

  3. Windows 10, 8 ও 7-এ ডিস্ক স্পেস ফাঁকা করুন: সহজ ও কার্যকর টিপস

  4. লিনাক্সে ডিস্ক স্পেস ম্যানেজমেন্টে দক্ষতা: অপরিহার্য DF এবং DU কমান্ড