PowerShell ile Sunucu Disk Kullanım Raporu Oluşturma
İçindekiler
Giriş
İşletim sistemlerinin günlük yönetiminde, sunucuların disk kullanımını
düzenli olarak takip etmek kritik bir öneme sahiptir.Piyasada sistem
sağlığını takip etmemize olanak sağlayan sayısız araç olmasına rağmen ben bu
makalede, PowerShell kullanarak basit bir şekilde sunucu disk kullanım
raporu oluşturmanın adımlarını açıklayacağım. Siz kendi ortamınıza göre
scripti özelleştirebilirsiniz.
İlk Adımlar
İlk olarak, scriptimizde kullanılacak olan fonksiyonu tanımlayacağız.
ConvertTo-GB fonksiyonu, byte cinsinden boyutu alır ve gigabayta
dönüştürerek geri verir. Bu, daha okunabilir raporlar oluşturmamıza yardımcı
olacaktır.
# Function to convert bytes to GB function ConvertTo-GB { param([int64]$size) $size / 1GB }
Sunucu ve Sürücü Bilgilerini Almak
Daha sonra, disk kullanımını izleyeceğimiz sunucuları ve raporlarda hariç
tutmak istediğimiz bir sürücü harfini belirleyeceğiz. Ayrıca, raporlarda
belirli eşik değerlerini tanımlayacağız.
Burada $FSGBThreshold olarak tanımladığımız değer GB cinsinden
kalan boş alanın hangi değerden sonra dikkate alınması gerektiğini
belirtir.
# List of servers $servers = "Server01", "Server02", "Server03" # Excluded drive letter $excludedDrive = "H:" # Free Space (GB) threshold value $FSGBThreshold = 50 # Free Space Percentage (second level)(%) threshold value $FSPThresholdOrange = 20 # Free Space Percentage (first level)(%) threshold value $FSPThresholdRed = 10
Bu örnekte 50 GB ve altında kalan bir boş alan kalması durumunda raporda
ilgili renklendirme kuralları tetiklenir. Aynı
şekilde $FSPThresholdOrange değeri warning eşiğini
ve $FSPThresholdRed critical eşiğini % cinsinden belirlememize olanak sağlar.
HTML Raporunu Oluşturmak
HTML raporu oluşturmak için aşağıdaki şablonu kullanacağız. Bu rapor, her
sunucu ve disk için ayrı ayrı bilgiler içerecek ve renk kodlarıyla görsel
olarak bilgi verecektir.
# Create HTML report $htmlReport = @" <style> <!DOCTYPE html> <html> <head> <style> table { font-family: Arial, sans-serif; border-collapse: collapse; width: 100%; } th, td { border: 1px solid #dddddd; text-align: left; padding: 8px; } th { background-color: #f2f2f2; } .red { background-color: #ff8080; /* Red */ } .orange { background-color: #ffb366; /* Orange */ } .green { background-color: #b3ffcc; /* Green */ } .yellow { background-color: #FFFACD; /* Yellow */ } </style> </head> <body> <h2>Server Disk Usage Report</h2> <table> <tr> <th>Server</th> <th>Drive</th> <th>Volume Name</th> <th>File System</th> <th>Total Size (GB)</th> <th>Free Space (GB)</th> <th>Used Space (GB)</th> <th>Free Space Percentage</th> </tr> "@
Sunucu ve Disk Bilgilerini İşleme
Sunucular ve disk bilgilerini almak için WMI (Windows Management
Instrumentation) kullanacağız.
WMI Nedir ?
WMI (Windows Management Instrumentation), Microsoft'un Windows
işletim sistemlerinde bulunan bir yönetim altyapısıdır. WMI, sistem ve ağ
yönetimi için bir çerçeve sağlayarak, uzaktan yönetim ve izleme işlemleri
gerçekleştirmek için kullanılır. WMI, Windows'un yönetim ve izleme
işlevselliğini standartlaştıran bir arabirim sunar ve genellikle
PowerShell ve diğer yönetim araçları gibi birçok farklı programlama
dilinde kullanılır.
Her bir disk için gerekli bilgileri çekecek ve renk kodlarını
belirleyeceğiz.
Renk Kodlarını Belirleme ve Raporu Doldurma
Her disk için belirlenen eşik değerlere göre renk kodlarını belirleyeceğiz
ve raporu dolduracağız.
Bu kod, belirli koşullara göre iki farklı renk sınıfı ($FSPcolorClass
ve $FSGBcolorClass) belirler. Eğer Free Space(%) %10 'un
altındaysa ve aynı zamanda Free Space (GB) alanı 50GB'ın
altındaysa, o zaman hücre rengi
"kırmızı" olur; aksi halde
"sarı" olur. Çünkü disk
boyutu çok büyük olduğunda %10 bir boş alan değeri dahi büyük GB
alanalarına denk gelmektedir. Örnek vermek gerekirse 1 TB bir diskin
%10'luk bir boş alanı 100 GB'a denk geldiğinden critical
seviye olarak değerlendirilebilmesi için GB cinsinden belirlenen eşik
sınırına bakılır.
Aynı şekilde eğer Free Space(%)%20'nin altındaysa ve aynı zamanda Free Space (GB) alanı 50GB'ın altındaysa, o zaman hücre rengi
"turuncu" olur; aksi halde
"sarı"
olur. Eğer bu koşulların hiçbirisi sağlanmazsa, yani diskte toplam boyutunun
%20'sinden daha fazla boş alan varsa renk sınıfı
"yeşil" olur. Bu kod, disk
kullanım durumuna göre renk sınıflarını belirleyerek bir tür görsel geri
bildirim sağlamak için kullanılır.
foreach ($server in $servers) { $diskInfo = Get-WmiObject -ComputerName $server -Query "SELECT * FROM Win32_LogicalDisk" foreach ($disk in $diskInfo) { $driveLetter = $disk.DeviceID # Skip excluded drive if ($driveLetter -eq $excludedDrive) { continue } $volumeName = $disk.VolumeName $fileSystem = $disk.FileSystem $totalSize = [math]::Round((ConvertTo-GB $disk.Size),1) $freeSpace = [math]::Round((ConvertTo-GB $disk.FreeSpace),1) $usedSpace = $totalSize - $freeSpace $freeSpacePercentage = [math]::Round(($freeSpace / $totalSize) * 100, 2) $FSGBcolorClass = '' $FSPcolorClass = '' if ($freeSpacePercentage -le $FSPThresholdRed) { if($freeSpace -le $FSGBThreshold) { $FSPcolorClass = 'red' $FSGBcolorClass = 'transparent' } else { $FSPcolorClass = 'yellow' $FSGBcolorClass = 'green' } } elseif ($freeSpacePercentage -le $FSPThresholdOrange) { if($freeSpace -le $FSGBThreshold) { $FSPcolorClass = 'orange' $FSGBcolorClass = 'transparent' } else { $FSPcolorClass = 'yellow' $FSGBcolorClass = 'green' } } else { $FSPcolorClass = 'green' }
Raporu Tamamlama
Son olarak, her disk için elde edilen bilgileri rapora ekleyeceğiz.
$htmlReport += @" <tr> <td>$server</td> <td>$driveLetter</td> <td>$volumeName</td> <td>$fileSystem</td> <td>$totalSize</td> <td class="$FSGBcolorClass">$freeSpace</td> <td>$usedSpace</td> <td class="$FSPcolorClass">$freeSpacePercentage%</td> </tr> </table> </body> </html> "@ } }
Raporu Mail Olarak Gönderme
Tamamladığımız rapor içeriğini mail olarak göndermek için aşağıdaki kod
bloğunu kullanacağız.
# Mail configuration $smtpServer = "smtp.yourdomain.com" $smtpFrom = "your-email@yourdomain.com" $smtpTo = "recipient-email@theirDomain.com" $messageSubject = "Server Disk Usage Report" $messageBody = $htmlReport $smtp = New-Object Net.Mail.SmtpClient($smtpServer) $mailmessage = New-Object Net.Mail.MailMessage($smtpFrom, $smtpTo, $messageSubject, $messageBody) $mailmessage.IsBodyHTML = $true # Send the mail try { $smtp.Send($mailmessage) Write-Host "Server Disk usage report sent successfully." } catch { Write-Host "Server Disk usage report could not sent to:$smtpTo address" }
Bu kod, aşağıdaki adımları gerçekleştirir:
- Mail Konfigürasyonu: SMTP sunucusu, gönderen e-posta adresi, alıcı e-posta adresi, e-posta konusu ve e-posta gövdesi gibi e-posta gönderimine ilişkin konfigürasyon bilgilerini içerir. Burada ilgili alanları kendi sisteminize göre tanımlamanız gerekmektedir.
- SMTP İstemcisi Oluşturma: Net.Mail.SmtpClient sınıfından bir örnek oluşturularak SMTP istemcisi (client) konfigüre edilir.
- Mail Mesajı Oluşturma: Net.Mail.MailMessage sınıfından bir örnek oluşturularak e-posta mesajı konfigüre edilir. HTML gövdeli bir e-posta olduğunu belirtmek için IsBodyHTML özelliği true olarak ayarlanır.
- E-posta Gönderimi: Send metodu kullanılarak e-posta gönderilir. Gönderim başarılıysa, bir başarı mesajı yazdırılır. Eğer gönderim sırasında bir hata olursa, catch bloğu çalışır ve bir hata mesajı yazdırılır.
Raporu Dosyaya Kaydetme
HTML raporu bir dosyaya kaydetmek için aşağıdaki kodu
kullanabilirsiniz.
# Save HTML report to file try { $htmlReport | Out-File -FilePath $htmlFilePath Write-Host "Disk usage report generated successfully. Path: $htmlFilePath" } catch { Write-Host "Disk usage report could not generated" }
Sonuç
Bu PowerShell scriptini, belirlediğiniz sunucuların disk kullanım
durumunu izlemek, raporlamak ve gerektiğinde uyarılar almak için
kullanabilirsiniz. Raporun HTML formatında olması, bilgileri kolayca
paylaşma ve okuma imkanı sağlar.
Umarım bu makale, PowerShell kullanarak sunucu disk kullanımını
izleme ve raporlama konusunda size rehberlik eder. Başka sorularınız
veya önerileriniz varsa, lütfen yorum bölümünde paylaşın. İyi
çalışmalar!
Yorumlar
Yorum Gönder