PowerShell: Boş Disk Alanını ve Disk Kullanımını Kontrol Edin
Bu makalede, PowerShell kullanarak yerel veya uzak bir Windows ana bilgisayarında boş disk alanını ve disk kullanımını nasıl kontrol edeceğinizi göstereceğiz. Ayrıca, boş alan eşiği aşılırsa yöneticiyi açılır bir bildirim veya e-posta ile nasıl bilgilendireceğinizi düşünün.
WMI ve PowerShell ile Windows'ta Boş Sürücü Alanı Nasıl Kontrol Edilir?
Win32_logicalDisk WMI sınıfını kullanarak Windows'taki mantıksal sürücüleriniz hakkında bilgi alabilirsiniz.
Aşağıdaki komut, bilgisayarınızdaki mantıksal sürücülerle ilgili tüm bilgileri görüntüler:
Get-WmiObject -Class Win32_LogicalDiskDaha yeni PowerShell Core 7.x kullanıyorsanız, bu PowerShell sürümünde WMI'nin desteklenmediğini unutmayın (PowerShell Core, .Net Core'u temel aldığından). Get-WmiObject komutunu çalıştırmayı denerseniz, aşağıdaki hatayı göreceksiniz:
The term 'Get-WmiObject' is not recognized as a name of a cmdlet, function, script file, or executable program. WMI yerine CIM kullanın, örneğin:
Get-CimInstance win32_logicaldisk
FreeSpace özelliği, sürücülerin her birinde kalan bayt cinsinden boş alan miktarını içerir. Daha kullanışlı hale getirmek için, onu GB'ye dönüştürebilir ve her bir mantıksal diskteki boş alan miktarını % olarak görüntüleyebilirsiniz (boş alanın toplam disk boyutuna oranı olarak). Aşağıdaki PowerShell betiğini kullanabilirsiniz:
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)}}|ftKomut dosyası, mantıksal sürücülerin bir listesini, boyutlarını ve boş alan yüzdesini görüntüler.
Bu betiği PowerShell Core'da kullanmak için değiştirin
Get-WmiObjectile
Get-CimInstanceBir diskteki boş alanla ilgili bilgileri basitçe görüntülemek istemiyorsanız, bunun yerine biraz işlem yapmak (e-posta göndermek veya bir açılır mesaj göstermek) istiyorsanız, belirtilen eşikten daha az boş alan varsa, şunu kullanabilirsiniz: Aşağıdaki PowerShell betiği:
$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)
}
}
}Bu komut dosyası, diskte kalan boş alan eşik değerlerini ayarlar — %5 ve %20. Herhangi bir diskteki boş alan miktarı belirtilen değerlerin altındaysa, bir modal bilgi penceresi görüntülenir. Bunu açılır bir bildirim olarak gösterebilir veya hemen Disk Temizleme aracını çalıştırabilirsiniz (
cleanmgr.exe).
Sorunun yöneticisine e-posta göndermek isterseniz, Send-MailMessage ile bir SMTP sunucusu (Exchange ana bilgisayarı veya başka herhangi bir SMTP hizmeti olabilir, yerleşik Windows Server SMTP rolü bile iş görür) aracılığıyla bir e-posta gönderebilirsiniz. cmdlet'i:
Send-MailMessage -To “srv_admin@a-d.site” -From “$env:computername@a-d.site” -Subject “Insufficient disk space on server $env:computername” -Body “Disk $($Disk.DeviceID) has only $DiskFreeSpace GB left” -Credential (Get-Credential) -SmtpServer smtp.a-d.site -Port 587Bu örnekte, SMTP ana bilgisayarına etkileşimli olarak bağlanmak için kimlik bilgilerini girmeniz gerekir. SMTP ana makinenizi, güvenilir ana bilgisayarlardan gelen iletileri kimlik doğrulaması olmadan kabul edecek şekilde yapılandırabilir veya dosyada kayıtlı kimlik bilgilerini kullanarak SMTP kimlik doğrulamasını yapılandırabilirsiniz (e-posta göndermek için Yönetilen Hizmet Hesaplarını kullanmak mümkün değildir).
Görev Zamanlayıcı'yı kullanarak PowerShell betiğini düzenli olarak çalıştırabilir veya bir Windows hizmeti olarak yapılandırılabilir. Bu Windows ana bilgisayarında yeterli boş alan yoksa yönetici bir bildirim alır.
PowerShell aracılığıyla Uzak Windows Ana Bilgisayarlarından Boş Disk Alanı Alın
Invoke-Command cmdlet'i, uzak bilgisayarlarda kalan boş alanı kontrol etmek için bir PS komut dosyası çalıştırmak için kullanılabilir.
Invoke-Command -ComputerName srv01,srv02,srv03 -FilePath "C:\PS\checkfreespace.ps1"Boş alan miktarını kontrol etmek istediğiniz sunucular etki alanınızdaysa Get-ADComputer cmdlet'ini kullanarak bunların listesini Active Directory'den alabilir ve betiği her ana bilgisayarda çalıştırabilirsiniz:
$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows Server*" -and enabled -eq "true"').Name
Invoke-Command -ComputerName $computers -FilePath "C:\PS\checkfreespace.ps1" -ErrorAction SilentlyContinueUzak bilgisayarlardan WMI verilerini almak için RemoteWMI'yi de kullanabilirsiniz:
Get-WmiObject -Class Win32_logicalDisk -ComputerName srv01,srv02,srv03Bu kılavuz, disk alanını izlemek için en kolay kendi kendine yapılan çözümü açıklar. İzlenmesi gereken çok sayıda ana makineniz varsa, tam özellikli bir izleme sistemi (Zabbix, Icinga, PRTG, Nagios vb.) kullanmak daha iyidir.


