PowerShell ile E-postalarda Nasıl Arama Yapılır?
Exchange Online posta kutularındaki iletileri aramanın mükemmel bir yöntemi PowerShell'dir. Komutları beğeninize göre ayarlayabilir ve ihtiyacınız olan sonuçları alabilirsiniz. Ayrıca sonuçların CSV dosyasına aktarılması harikadır, böylece orada filtreleyebilirsiniz. Bu makalede PowerShell ile e-postalarda nasıl arama yapacağınızı öğreneceksiniz.
Microsoft Graph PowerShell'i yükleyin
Windows PowerShell'i yönetici olarak çalıştırın ve Microsoft Graph PowerShell'i yükleyin.
Install-Module Microsoft.Graph -ForceInstall-Module Microsoft.Graph.Beta -AllowClobber -ForceÖnemli: Her zaman Microsoft Graph PowerShell ve Microsoft Graph Beta PowerShell modüllerini yükleyin. Bunun nedeni, bazı cmdlet'lerin henüz son sürümde mevcut olmaması ve çalışmayacak olmasıdır. Hataları ve yanlış sonuçları önlemek için bir cmdlet'i veya betiği çalıştırmadan önce her iki modülü de en son sürüme güncelleyin.
Microsoft Entra'da uygulama kaydını yapılandırma
Komutları veya betikleri çalıştırmadan önce, Microsoft Graph PowerShell ile kimlik doğrulaması yapmak için öncelikle doğru izinlere ve istemci sırrına sahip bir uygulama kaydı oluşturmanız gerekir.
1. Yeni uygulamayı kaydedin
Microsoft Entra ID'ye yeni bir uygulama kaydedin:
- Microsoft Entra yönetim merkezinde oturum açın
- Kimlik > Uygulama > Uygulama kayıtları'nı tıklayın
- Yeni Kayıt'ı tıklayın
- Uygulamaya Arama-Posta adını verin
- Yalnızca bu kuruluş dizinindeki hesaplar (yalnızca EXOIP - Tek kiracı)'yı seçin
- Kaydol'u tıklayın
Posta Arama uygulaması başarıyla oluşturuldu. Daha sonra Microsoft Graph PowerShell'e bağlanırken ihtiyacınız olacağı için aşağıdaki değerleri kopyalayıp Not Defteri'ne yapıştırın.
- Uygulama (istemci) kimliğini kopyalayın
- Dizin (kiracı) kimliğini kopyalayın
2. API izinlerini atayın
Önceki adımda kaydettiğiniz uygulama için API izinlerini atayın:
- API izni'ni tıklayın
- İzin ekle'yi tıklayın
- Microsoft API'leri'ni tıklayın
- Microsoft Graph'ı tıklayın
- Uygulama izinleri'ni tıklayın
- User.Read.All'u arayın
- Kullanıcılar > Kullanıcı.TümünüOku'yu seçin
- Mail.Read'i arayın
- Posta > Posta.Oku'yu seçin
- İzin ekle'yi tıklayın
API izinleri başarıyla eklendi. Bir sonraki adım yönetici izni vermektir.
3. Yönetici onayı verin
Önceki adımda seçtiğiniz izinler için yönetici izni vermelisiniz:
- EXOIP için yönetici izni ver'i tıklayın
- Evet'i tıklayın
- Yeşil onay işareti, yönetici iznini başarıyla verdiğinizi gösterir
4. Müşteri Sırrı Oluşturun
Microsoft Entra'da yeni bir uygulamayı kaydettikten, API izinlerini atadıktan ve yönetici onayı verdikten sonra bir istemci sırrı oluşturmanız gerekir.
Microsoft Entra ID'de uygulamanız için bir İstemci Gizli Anahtarı oluşturmak için şu adımları izleyin:
- Sertifikalar ve sırlar'ı tıklayın
- Müşteri sırları > Yeni istemci sırrı'nı tıklayın
- Açıklama yazın
- Bir Son kullanma tarihi seçin
- Ekle'yi tıklayın
Not: Müşteri Sırrı'nın son geçerlilik tarihi maksimum 24 ay (2 yıl) olabilir. PowerShell ile Microsoft Entra ID'deki İstemci Gizli Anahtarını istediğiniz zaman yenileyebilirsiniz.
- İstemci Sırrı değerini kopyalayın ve Not Defteri'ne kaydedin
İstemci Sırrı ile Microsoft Graph PowerShell'e bağlanın
MS Graph PowerShell'e Client Secret ile bağlanmak için aşağıdaki parametre değerlerini değiştirmeniz gerekir:
- 2. satıra Uygulama İstemci Kimliği değerini yazın
- Dizin Kiracı Kimliği değerini 3. satıra yazın
- Müşteri Sırrı değerini değerini 4. satıra yazın
Aşağıdaki PowerShell betiğini çalıştırın.
# Configuration
$ClientId = "c6787ff5-08ec-4e96-b4d2-1d1782303310"
$TenantId = "eb403171-a4ec-4d98-a08f-1876318c9deb"
$ClientSecret = "6_q8Q~X9e-fjwWhVVP_WWx~ua4JMI.BWkI7Q7b7B"
# Convert the client secret to a secure string
$ClientSecretPass = ConvertTo-SecureString -String $ClientSecret -AsPlainText -Force
# Create a credential object using the client ID and secure string
$ClientSecretCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $ClientId, $ClientSecretPass
# Connect to Microsoft Graph with Client Secret
Connect-MgGraph -TenantId $tenantId -ClientSecretCredential $ClientSecretCredentialBelirli bir kullanıcıya ait e-postaları arayın
Belirli bir kullanıcıdan gelen tüm mesajları alın.
$User = "Amanda.Morgan@exoip.com"
Get-MgUserMessage -All -UserId "$User" |
Select-Object Subject, InternetMessageId, ReceivedDateTime,
@{Name = "Sender"; Expression = { $_.Sender.EmailAddress.Address } },
@{Name = "Recipients"; Expression = { $_.ToRecipients.EmailAddress.Address -join ', ' } } |
Out-GridView
Belirli bir kullanıcıdan okunan tüm mesajları alın.
$User = "Amanda.Morgan@exoip.com"
Get-MgUserMessage -All -UserId "$User" -Filter "IsRead eq true" |
Select-Object Subject, InternetMessageId, ReceivedDateTime,
@{Name = "Sender"; Expression = { $_.Sender.EmailAddress.Address } },
@{Name = "Recipients"; Expression = { $_.ToRecipients.EmailAddress.Address -join ', ' } } |
Out-GridViewBelirli bir kullanıcıdan gelen okunmamış tüm mesajları alın.
$User = "Amanda.Morgan@exoip.com"
Get-MgUserMessage -All -UserId "$User" -Filter "IsRead eq false" |
Select-Object Subject, InternetMessageId, ReceivedDateTime,
@{Name = "Sender"; Expression = { $_.Sender.EmailAddress.Address } },
@{Name = "Recipients"; Expression = { $_.ToRecipients.EmailAddress.Address -join ', ' } } |
Out-GridViewTarihteki e-postaları arayın
Belirli bir tarihten sonra belirli bir kullanıcıdan gelen e-postaları arayın.
$User = "Amanda.Morgan@exoip.com"
$Date = "2024-01-01"
Get-MgUserMessage -All -UserId "$User" -Filter "ReceivedDateTime gt $Date" |
Select-Object Subject, InternetMessageId, ReceivedDateTime,
@{Name = "Sender"; Expression = { $_.Sender.EmailAddress.Address } },
@{Name = "Recipients"; Expression = { $_.ToRecipients.EmailAddress.Address -join ', ' } } |
Out-GridViewKonuyla ilgili e-postaları arayın
Belirli bir konuyla başlayan e-postaları arayın.
$Subject = "The subject"
$user = "Amanda.Morgan@exoip.com"
Get-MgUserMessage -All -UserId "$User" -Filter "startswith(Subject,'$Subject')" |
Select-Object Subject, InternetMessageId, ReceivedDateTime,
@{Name = "Sender"; Expression = { $_.Sender.EmailAddress.Address } },
@{Name = "Recipients"; Expression = { $_.ToRecipients.EmailAddress.Address -join ', ' } } |
Out-GridViewKonuya uygun e-postaları arayın.
$Subject = "The specific subject"
$user = "Amanda.Morgan@exoip.com"
Get-MgUserMessage -All -UserId "$user" -Filter "Subject eq '$Subject'" |
Select-Object Subject, InternetMessageId, ReceivedDateTime,
@{Name = "Sender"; Expression = { $_.Sender.EmailAddress.Address } },
@{Name = "Recipients"; Expression = { $_.ToRecipients.EmailAddress.Address -join ', ' } } |
Out-GridViewSon 30 güne ait e-postaları arayın
Kuruluştaki son 30 güne ait, alıcı ve gönderen tüm e-postaları arayalım. Sonuçlar Out-GridView'da görünecek ve bir CSV dosyasına aktarılacaktır.
Kuruluştaki son 30 güne ait tüm e-postaları arayın.
# Get all users
$users = Get-MgUser -All
# Create an empty array to store the data
$Data = @()
# Determine the date 30 days prior to today
$startDate = (Get-Date).AddDays(-30).ToString("yyyy-MM-dd")
# Loop through each user
foreach ($user in $users) {
# Ensure the user has an associated email address
if ($user.Mail) {
$messages = Get-MgUserMessage -UserId $user.Id -All -Filter "ReceivedDateTime ge $startDate" -ErrorAction SilentlyContinue
foreach ($message in $messages) {
$Data += [PSCustomObject]@{
ReceivedDateTime = $message.ReceivedDateTime
Subject = $message.Subject
Sender = $message.Sender.EmailAddress.Address -join ','
Recipient = $message.ToRecipients.EmailAddress.Address -join ','
InternetMessageId = $message.InternetMessageId
}
}
}
}
# Display and export the data
$Data | Out-GridView
$Data | Export-Csv -Path "C:\temp\All_emails.csv" -NoTypeInformation -Encoding utf8Son 30 gün içinde belirli bir alıcıya gönderilen kuruluştaki tüm e-postaları arayın.
# Email address of the recipient you want to filter
$recipientEmailAddress = "amanda.morgan@exoip.com"
# Get all users
$users = Get-MgUser -All
# Create an empty array to store the data
$Data = @()
# Determine the date 30 days prior to today
$startDate = (Get-Date).AddDays(-30).ToString("yyyy-MM-dd")
# Loop through each user
foreach ($user in $users) {
# Ensure the user has an associated email address
if ($user.Mail) {
$messages = Get-MgUserMessage -UserId $user.Id -All -Filter "ReceivedDateTime ge $startDate" -ErrorAction SilentlyContinue
foreach ($message in $messages) {
# Check if the recipient matches the desired email address
if ($message.ToRecipients.EmailAddress.Address -eq $recipientEmailAddress) {
$Data += [PSCustomObject]@{
ReceivedDateTime = $message.ReceivedDateTime
Subject = $message.Subject
Sender = $message.Sender.EmailAddress.Address
Recipient = $message.ToRecipients.EmailAddress.Address
InternetMessageId = $message.InternetMessageId
}
}
}
}
}
# Display and export the data
$Data | Out-GridView
$Data | Export-Csv -Path "C:\temp\Recipient_emails.csv" -NoTypeInformation -Encoding utf8Kuruluşunuzda son 30 gün içinde belirli bir gönderenden gönderilen tüm e-postaları arayın.
# Email address of the sender you want to filter
$senderEmailAddress = "john.doe@gmail.com"
# Get all users
$users = Get-MgUser -All
# Create an empty array to store the data
$Data = @()
# Determine the date 30 days prior to today
$startDate = (Get-Date).AddDays(-30).ToString("yyyy-MM-dd")
# Loop through each user
foreach ($user in $users) {
# Ensure the user has an associated email address
if ($user.Mail) {
$messages = Get-MgUserMessage -UserId $user.Id -All -Filter "ReceivedDateTime ge $startDate" -ErrorAction SilentlyContinue
foreach ($message in $messages) {
if ($message.Sender.EmailAddress.Address -eq $senderEmailAddress) {
$Data += [PSCustomObject]@{
ReceivedDateTime = $message.ReceivedDateTime
Subject = $message.Subject
Sender = $message.Sender.EmailAddress.Address
Recipient = ($message.ToRecipients.EmailAddress.Address -join ',')
InternetMessageId = $message.InternetMessageId
}
}
}
}
}
# Display and export the data
$Data | Out-GridView
$Data | Export-Csv -Path "C:\temp\Sender_emails.csv" -NoTypeInformation -Encoding utf8İşte bu!
Devamını oku: Entra ID uygulama kayıtlarını dışa aktar Sertifikalar ve Sırlar geçerlilik sonu raporu »
Çözüm
PowerShell ile e-postalarda nasıl arama yapacağınızı öğrendiniz. Öncelikle Microsoft Entra'da doğru izinlere sahip bir uygulama kurun. Daha sonra Microsoft Graph PowerShell ile uygulamaya bağlanın. Son olarak PowerShell ile e-postaları aramak için komutları çalıştırın.
Bu makaleyi beğendiniz mi? Ayrıca Microsoft 365'te Üst Düzey Etki Alanı (TLD) Nasıl Engellenir konusunu da beğenebilirsiniz. Bizi takip etmeyi ve bu makaleyi paylaşmayı unutmayın.










