PowerShell kullanarak Exchange Online üzerindeki dağıtım listelerinin son 10 gün içindeki durumunu izleyen bir betikten bahsedeceğiz. Bu betik sayesinde, her dağıtım listesinin birincil e-posta adresi, üye sayısı, grup sahibi sayısı ve oluşturulma tansiyonu gibi bilgileri toplayarak bir HTML rapor çıktısı alacağız.

Gereksinimler
-PowerShell
-Exchange Online Management Modulü veya Exchange Online PowerShell modülü

PowerShell’i yönetici olarak çalıştırın, ardından şu kodları sırasıyla yazın.

Install-Module ExchangeOnlineManagement
Import-Module ExchangeOnlineManagement

Ardından aşağıdaki kod bloğunu kopyalayıp, ps1 olarak masaüstünüze kaydedin.
Dosyayı yönetici olarak çalıştırın.
Log-in olmanızı isteyecek, login olduktan sonra script çalışmaya başlar.

Script çıktısı;


Connect-ExchangeOnline

$EndDate = Get-Date
$StartDate = $EndDate.AddDays(-10)
$Messages = $Null

$Page = 1
Write-Host "Son 10 gune ait mesaj izleme verileri toplaniyor."

Do {
$PageOfMessages = (Get-MessageTrace -Status Expanded -PageSize 5000 -Page $Page -StartDate $StartDate -EndDate $EndDate | Select Received, RecipientAddress)
$Page++
$Messages += $PageOfMessages
} Until ($PageOfMessages -eq $Null)

$MessageTable = @{}
$Messages | ForEach-Object {
$MessageTable[$_.RecipientAddress] = $true
}

$DLs = Get-DistributionGroup -ResultSize Unlimited
Write-Host $DLs.Count "adet dagitim listesi isleniyor..."

$HtmlOutput = @"
<!DOCTYPE html>
<html>
<head>
<style>
body {
font-family: Arial, sans-serif;
}
h1 {
text-align: center;
}
table {
border-collapse: collapse;
width: 80%;
margin: auto;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
</style>
<title>Dagitim Listesi Durumu</title>
</head>
<body>
<h1>Dagitim Listesi Durumu / Son 10 Gun</h1>
<table>
<tr>
<th>Dagitim Listesi Adi</th>
<th>Birincil E-posta Adresi</th>
<th>Durumu</th>
<th>Uye Sayisi</th>
<th>Grup Sahip Sayisi</th>
<th>Olusturulma Tarihi</th>
</tr>
"@

$Results = ForEach ($DL in $DLs) {
$isActive = if ($MessageTable.ContainsKey($DL.PrimarySMTPAddress)) {"<span style='color: green;'>Aktif</span>"} else {"<span style='color: red;'>Pasif</span>"}
$memberCount = (Get-DistributionGroupMember -Identity $DL).Count
$ownerCount = $DL.ManagedBy.Count
$creationDate = $DL.WhenCreated.ToString("dd/MM/yyyy")

$HtmlRow = "<tr><td>$($DL.DisplayName)</td><td>$($DL.PrimarySMTPAddress)</td><td>$isActive</td><td>$memberCount</td><td>$ownerCount</td><td>$creationDate</td></tr>"
$HtmlOutput += $HtmlRow
}

$HtmlOutput += @"
</table>
</body>
</html>
"@

$HtmlOutput | Out-File -FilePath "C:\DagitimListesiDurumu.html"
Write-Host "HTML ciktisi olusturuldu."
Invoke-Item "C:\DagitimListesiDurumu.html"