Exchange Server Backup Report V2.0

Merhaba sevgili okurlar! Bugün, Exchange Server yedekleme işlemlerinizin durumu hakkında otomatik raporlar almanızı sağlayacak bir PowerShell scripti sunuyoruz. Bu script v2, eski sürüme göre birçok yeni özellik ve düzenleme içeriyor. Aşağıda bu scriptin detaylarını bulabilirsiniz.

Özellikler:

  • HTML formatında otomatik e-posta raporları
  • Yedeklenmiş ve yedeklenmemiş veritabanlarının ayrıntılı listesi
  • Veritabanlarının sağlık durumu hakkında bilgi
  • Her veritabanı için son yedekleme zamanı
  • Veritabanlarında ne kadar boş alan (whitespace) olduğu
  • Yedeklenmemiş veritabanlarının kırmızıyla vurgulanması
  • Yedeklenmemiş veritabanları sayısının Body bölümünde görüntülenmesi

Scriptin Çalışma Prensibi:

  1. Gerekli değişkenler ve parametreler tanımlanır.
  2. Exchange PowerShell modülü eklenir.
  3. Yedekleme rapor klasörü kontrol edilir, yoksa oluşturulur.
  4. Kimlik bilgileri kontrol edilir ve gerekirse kaydedilir.
  5. Veritabanları ve bilgileri alınır.
  6. HTML formatında bir rapor oluşturulur.
  7. Oluşturulan rapor e-posta ile gönderilir.

Örnek Kullanım:

Scriptimiz, yedekleme durumunuzu otomatik olarak kontrol etmek ve e-posta ile rapor almak için kullanılabilir. Aşağıda scriptin bir örneğini bulabilirsiniz.

# Mail, Subject and File
$From = "[email protected]"
$To = "[email protected]"
$SMTPServer = "mail.fixcloud.com.tr"
$Port = 587
$Priority = "High"
$Subject = "Exchange Server Backup Report"
$CredentialFile = "C:\Backup Report\credentials.backup"

# Load Exchange snap-in
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

# Backup Report Folder
if (!(Test-Path "C:\Backup Report")) {
    New-Item -ItemType Directory -Path "C:\Backup Report"
}

# Credential Check and Save
if (!(Test-Path $CredentialFile)) {
    Get-Credential -Message "Lütfen $From hesabı ile hesap bilgilerini doğrulayın." | Export-Clixml -Path $CredentialFile
}
$Credential = Import-Clixml -Path $CredentialFile

# Database Info
$Databases = Get-MailboxDatabase -Status | Select Name, Server, Mounted, LastFullBackup, LastIncrementalBackup, DatabaseSize, MasterType, MasterServerOrAvailabilityGroup, @{Name='Mailboxes';Expression={(Get-Mailbox -Database $_.Name).Count}}, @{Name='Whitespace';Expression={(Get-MailboxDatabase -Status $_.Name).AvailableNewMailboxSpace.ToGB()}}

# Number of unsupported databases
$UnbackedUpCount = ($Databases | Where-Object {-not $_.LastFullBackup -or $_.LastFullBackup -lt $Threshold}).Count
$BackedUpCount = ($Databases.Count) - $UnbackedUpCount

# Creating an HTML report
$HTMLReport = @"
<!DOCTYPE html>
<html>
<head>
<style>
table {
    width: 100%;
    border-collapse: collapse;
}
table, th, td {
    border: 1px solid black;
}
th, td {
    padding: 15px;
    text-align: left;
}
th {
    background-color: #f2f2f2;
}
.fail {
    color: red;
    background-color: #fdd;
}
.success {
    background-color: #dfd;
}
.incremental {
    background-color: #ffea7f;
}
</style>
</head>
<body>

<h2>Exchange Server Backup Report</h2>
<p>Toplamda $AllDbCount DB bulunmaktadir. 24 saat icerisinde $BackedUpCount tanesi yedeklenmistir ve $UnbackedUpCount tanesi yedeklenmemistir.</p>

<h3>Databases</h3>
<table>
<tr>
    <th>Name</th>
    <th>Server</th>
    <th>DAG</th>
    <th>Health</th>
    <th>Backup Type</th>
    <th>Backup Time</th>
    <th>Database Size</th>
    <th>Whitespace (GB)</th>
    <th>Mailboxes</th>
</tr>

$($Databases | ForEach-Object {
    $backupType = if ($_.LastFullBackup -gt $Threshold) { "<td class='success'>Full</td>" } elseif ($_.LastIncrementalBackup -gt $Threshold) { "<td class='incremental'>Incremental</td>" } else { "<td class='fail'>Fail</td>" }
    $backupTime = if ($_.LastFullBackup) { $_.LastFullBackup } elseif ($_.LastIncrementalBackup) { $_.LastIncrementalBackup } else { 'N/A' }
    $health = "$($_.Mounted) / $($_.MasterType)"
    @"

    <tr>
        <td>$($_.Name)</td>
        <td>$($_.Server)</td>
        <td>$($_.MasterServerOrAvailabilityGroup)</td>
        <td>$health</td>
        $backupType
        <td>$backupTime</td>
        <td>$($_.DatabaseSize)</td>
        <td>$($_.Whitespace)</td>
        <td>$($_.Mailboxes)</td>
    </tr>

"@} | Sort-Object {$_ -match "<td class='fail'>Fail</td>" -eq $false})

</table>
</body>
</html>
"@

# Sending the report by e-mail
$MessageParameters = @{
    From = $From
    To = $To
    Subject = $Subject
    Priority = $Priority
    Body = $HTMLReport
    BodyAsHtml = $true
    SmtpServer = $SMTPServer
    Port = $Port
    Credential = $Credential
}

Send-MailMessage @MessageParameters

Yukarıdaki scripti kullanarak, Exchange sunucunuzdaki veritabanlarının yedekleme durumunu düzenli olarak takip edebilirsiniz. Bu sayede yedekleme sorunlarını hızla tespit edebilir ve gerekli müdahaleleri yapabilirsiniz.

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

Script başlangıcında, Exchange PowerShell modülü yüklenir. Bu, scriptin Exchange sunucusuyla iletişim kurabilmesini sağlar.

Yedekleme Rapor Klasörünün Kontrolü

if (!(Test-Path "C:\Backup Report")) {
    New-Item -ItemType Directory -Path "C:\Backup Report"
}

Script, yedekleme raporları için bir klasör oluşturur. Eğer bu klasör zaten mevcut değilse, script otomatik olarak bu klasörü oluşturur.

Kimlik Bilgilerinin Kontrolü ve Kaydedilmesi

if (!(Test-Path $CredentialFile)) {
    Get-Credential -Message "Lütfen $From hesabı ile hesap bilgilerini doğrulayın."| Export-Clixml -Path $CredentialFile
}
$Credential = Import-Clixml -Path $CredentialFile

Script, e-posta gönderimi için kimlik bilgilerini kontrol eder ve kaydeder. Bu, scriptin e-posta sunucusuna bağlanabilmesi için gereklidir.

Veritabanı Bilgilerinin Alınması

$Databases = Get-MailboxDatabase -Status | Select Name, Server, Mounted, LastFullBackup, LastIncrementalBackup, DatabaseSize, MasterType, MasterServerOrAvailabilityGroup, @{Name='Mailboxes';Expression={(Get-Mailbox -Database $_.Name).Count}}

Script, Exchange sunucusundaki tüm veritabanlarının bilgilerini alır. Bu, yedekleme raporu oluşturulurken kullanılır.

Yedeklenmemiş Veritabanlarının Sayılması

$UnbackedUpCount = ($Databases | Where-Object {-not $_.LastFullBackup -and -not $_.LastIncrementalBackup}).Count
$BackedUpCount = ($Databases.Count) - $UnbackedUpCount

Script, yedeklenmemiş veritabanlarının sayısını belirler. Bu, yedekleme raporu için önemli bir bilgidir.

HTML Raporunun Oluşturulması

Script, yedekleme raporunu HTML formatında oluşturur. Bu rapor, yedeklenmiş ve yedeklenmemiş veritabanları hakkında ayrıntılı bilgi içerir. Veritabanlarının adı, sunucu adı, yedekleme tipi, son yedekleme zamanı, veritabanı boyutu ve posta kutusu sayısı gibi bilgiler bu raporda bulunur.

Raporun E-posta ile Gönderilmesi

$MessageParameters = @{
    From = $From
    To = $To
    Subject = $Subject
    Priority = $Priority
    Body = $HTMLReport
    BodyAsHtml = $true
    SmtpServer = $SMTPServer
    Port = $Port
    Credential = $Credential
}
Send-MailMessage @MessageParameters

Oluşturulan HTML raporu, belirtilen e-posta adresine gönderilir. Bu sayede, yedekleme durumunuzu düzenli olarak takip edebilirsiniz.

Sonuç:

Bu script, Exchange Server yedekleme işlemlerinizi otomatik olarak kontrol etmenizi ve düzenli e-posta raporları almanızı sağlar. Bu sayede, yedekleme sorunlarını hızla tespit edebilir ve gerekli müdahaleleri yapabilirsiniz.

Yedekleme işlemlerinizin düzenli olarak takip edilmesi, veri kaybı riskini azaltır ve iş sürekliliğini sağlar. Bu script, bu süreci otomatikleştirerek size zaman kazandırır.

Yorum yapın