इस लेख में हम आपको दिखाएंगे कि PowerShell का उपयोग करके स्थानीय या रिमोट Windows होस्ट पर फ्री डिस्क स्पेस और डिस्क उपयोग कैसे चेक करें। साथ ही, विचार करें कि फ्री स्पेस थ्रेशोल्ड पार होने पर पॉप-अप नोटिफिकेशन या ईमेल द्वारा एडमिनिस्ट्रेटर को कैसे सूचित करें।
WMI और PowerShell के साथ Windows पर ड्राइव फ्री स्पेस कैसे चेक करें?
आप Windows में अपने लॉजिकल ड्राइव के बारे में जानकारी Win32_logicalDisk WMI क्लास का उपयोग करके प्राप्त कर सकते हैं।
नीचे दी गई कमांड आपके कंप्यूटर पर लॉजिकल ड्राइव के बारे में सभी जानकारी प्रदर्शित करेगी:
Get-WmiObject -Class Win32_LogicalDisk
यदि आप नए PowerShell Core 7.x का उपयोग कर रहे हैं, तो ध्यान दें कि WMI इस PowerShell वर्जन में सपोर्टेड नहीं है (चूंकि PowerShell Core .Net Core पर आधारित है)। यदि आप Get-WmiObject कमांड चलाने का प्रयास करते हैं, तो आपको निम्न एरर दिखाई देगा: The term 'Get-WmiObject' is not recognized as a name of a cmdlet, function, script file, or executable program। WMI के बजाय CIM का उपयोग करें, उदाहरण के लिए:
Get-CimInstance win32_logicaldisk
FreeSpace प्रॉपर्टी में प्रत्येक ड्राइव पर बचे फ्री स्पेस की मात्रा बाइट्स में होती है। सुविधा के लिए, आप इसे GB में कन्वर्ट कर सकते हैं और प्रत्येक लॉजिकल डिस्क पर फ्री स्पेस की मात्रा % में प्रदर्शित कर सकते हैं (फ्री स्पेस का टोटल डिस्क साइज से अनुपात के रूप में)। आप निम्न PowerShell स्क्रिप्ट का उपयोग कर सकते हैं:
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 से बदलें।
यदि आप केवल डिस्क पर फ्री स्पेस के बारे में जानकारी प्रदर्शित नहीं करना चाहते, बल्कि इसके बजाय कुछ कार्रवाई करना चाहते हैं (ईमेल भेजें या पॉप-अप संदेश दिखाएं) यदि फ्री स्पेस निर्दिष्ट थ्रेशोल्ड से कम है, तो आप नीचे दी गई PowerShell स्क्रिप्ट का उपयोग कर सकते हैं:
$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)
}
}
}
यह स्क्रिप्ट डिस्क पर बचे फ्री स्पेस के थ्रेशोल्ड मान सेट करती है — 5% और 20%। यदि किसी भी डिस्क पर फ्री स्पेस की मात्रा निर्दिष्ट मानों से कम है, तो एक मोडल सूचना विंडो प्रदर्शित होती है। आप इसे पॉप-अप नोटिफिकेशन के रूप में दिखा सकते हैं या तुरंत Disk Cleanup टूल (cleanmgr.exe) चला सकते हैं।
यदि आप समस्या के बारे में एडमिनिस्ट्रेटर को ईमेल करना चाहते हैं, तो आप Send-MailMessage कमांडलेट का उपयोग करके SMTP सर्वर के माध्यम से ईमेल भेज सकते हैं (यह Exchange होस्ट या कोई अन्य SMTP सर्विस हो सकती है, यहां तक कि बिल्ट-इन Windows Server 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 का उपयोग करके ईमेल भेजना संभव नहीं है)।
आप Task Scheduler का उपयोग करके PowerShell स्क्रिप्ट को नियमित रूप से चला सकते हैं या इसे Windows सर्विस के रूप में कॉन्फिगर कर सकते हैं। यदि इस Windows होस्ट पर पर्याप्त फ्री स्पेस नहीं है, तो एडमिनिस्ट्रेटर को नोटिफिकेशन मिलेगा।
PowerShell के माध्यम से रिमोट Windows होस्ट से फ्री डिस्क स्पेस प्राप्त करें
Invoke-Command कमांडलेट का उपयोग रिमोट कंप्यूटर पर शेष फ्री स्पेस चेक करने के लिए PS स्क्रिप्ट चलाने के लिए किया जा सकता है।
Invoke-Command -ComputerName srv01,srv02,srv03 -FilePath "C:\PS\checkfreespace.ps1"
यदि जिन सर्वरों पर आप फ्री स्पेस की मात्रा चेक करना चाहते हैं, वे आपके डोमेन में हैं, तो आप Get-ADComputer कमांडलेट का उपयोग करके Active Directory से उनकी सूची प्राप्त कर सकते हैं और प्रत्येक होस्ट के खिलाफ स्क्रिप्ट चला सकते हैं:
$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, आदि) का उपयोग करना बेहतर है।