PowerShell ile Takvim Etkinliklerini Exchange Posta Kutusundan Listeleme ve Kaldırma


PowerShell, Exchange kullanıcılarının takvimlerindeki etkinlik ve toplantı öğelerine erişmenizi sağlar. Bu gönderide, takvim etkinlikleri listesinin nasıl alınacağına veya belirli bir etkinliğin/randevunun bir Exchange Server veya Microsoft 365 kuruluşundaki tüm kullanıcıların takvimlerinden nasıl kaldırılacağına bakacağız.

Exchange Online'da Kullanıcı Takvimi Olaylarını Listeleme ve Okuma (Microsoft 365)

Öncelikle Exchange Online (Microsoft 365) kullanıcısının posta kutusunda takvim etkinliklerinin listesinin nasıl alınacağına bakalım. Microsoft Graph API, kullanıcının takvimindeki öğeler hakkında bilgi alabilir. Azure'da yeni bir uygulamayı kaydederek başlayın (Microsoft Entra ID -> Uygulama kaydı -> Yeni kayıt) ve ona aşağıdaki Microsoft Graph izinlerini verin:

Calendars.Read

Ve

Calendars.ReadBasic.All

Uygulamaları Azure'a kaydetme ve Microsoft Graph izinlerini verme hakkında daha fazla ayrıntı için PowerShell ile Microsoft Graph'a nasıl bağlanılır yazısını kontrol edin.

Artık Microsoft 365 kiracısına bağlanmak için Microsoft.Graph modülünü kullanabilirsiniz. Bu örnekte PowerShell'de sertifika tabanlı Azure kimlik doğrulamasını kullanacağız.

$certThumbprint = "9CF05589A4B29BECEE6456F08A76EBC3DC2BC581"
$AzureAppID = "111111-2222-3333-4444-12345678"
$tenant="a-d.onmicrosoft.com"
Connect-MgGraph -AppId $AzureAppID -CertificateThumbprint $certThumbprint -TenantId $tenant

Microsoft.Graph modülü eksikse yükleyin:

Install-Module Microsoft.Graph -Scope AllUsers

Belirli bir kullanıcının takviminde geçerli aya ait etkinlikleri görüntülemek için:

$StartDate = (Get-Date -Day 1)
$EndDate = (Get-Date -Day 1).Addmonths(1)
Get-MgUserCalendarView -UserId [email  -CalendarId "Calendar" -StartDateTime $StartDate -EndDateTime $EndDate | Select-Object -Property @{Name='EventStart';Expression={ $_.Start.DateTime}},@{Name='EventEnd';Expression={ $_.End.DateTime}},Subject, BodyPreview

Komut, olay konularını, içeriklerini (gövde önizlemesi) ve başlangıç/bitiş zamanlarını döndürdü.

PowerShell Kullanarak Etkinliği Exchange Takviminden Kaldırma

Exchange takvimlerindeki bir etkinliği (randevu, toplantı) iptal etmek (silmek) için Remove-CalendarEvents cmdlet'ini kullanın. Hem Exchange Online hem de Exchange Server 2019 kuruluşları için çalışır.

PowerShell konsolunu açın ve Exchange Online kiracınıza (Exchange Online PowerShell modülünü kullanarak) veya Exchange Server ana bilgisayarına bağlanın.

Düzenleyicisi olduğu kullanıcının takviminden yaklaşan tüm etkinliklerin (sonraki 15 gün içinde) kaldırılması:

Remove-CalendarEvents -Identity [email  -CancelOrganizedMeetings -QueryWindowInDays 15

Veya belirli bir tarihten itibaren başlayan tüm etkinlikleri silebilirsiniz:

Remove-CalendarEvents -Identity [email  -CancelOrganizedMeetings -QueryStartDate 04-10-2023 -QueryWindowInDays 60

Şunu kullanabilirsiniz:

-PreviewOnly -Verbose

Bu tür etkinliklerin listesini silmeden görüntüleme seçenekleri.

Remove-CalendarEvents cmdlet'inin ana dezavantajı, yalnızca yaklaşan takvim etkinliklerini kaldırabilmesi ve etkinlikleri konuya, düzenleyiciye, içeriğe veya başka herhangi bir özelliğe göre seçmenize izin vermemesidir. Remove-CalendarEvents'in en yaygın kullanımı, işten çıkarılan, hasta olan veya tatile çıkan bir çalışan tarafından oluşturulan etkinlik takvimini hızlı bir şekilde temizlemektir.

Geçmiş etkinlikleri silmeniz gerekiyorsa veya şirket içi Exchange Server 2016/2013/2010 kullanıyorsanız Search-Mailbox veya New-ComplianceSearch cmdlet'lerini kullanabilirsiniz. Exchange posta kutularındaki öğeleri aramak ve silmek için.

Örneğin Exchange Server'da aşağıdaki gibi belirli bir konuya sahip takvim etkinliklerini bulabilirsiniz:

Search-Mailbox -Identity [email  -SearchQuery {Subject:"Discuss: AD Schema Update" AND Kind:meetings AND Received:01/12/2023..15/01/2024} -TargetMailbox report_mbx -TargetFolder SearchMailboxResult -LogOnly -LogLevel Full

Bu komut, kullanıcının posta kutusunda bir olayı arar ve sonuçları report_mbx posta kutusunun SearchMailboxResult klasörüne kaydeder.

Bulunan etkinliği silmek isterseniz son parametreleri -DeleteContent ile değiştirin. Kullanıcının takvimindeki tüm etkinliklerin nasıl silineceği aşağıda açıklanmıştır:

SearchMailbox -identity [email  -SearchQuery kind:meetings -DeleteContent

Exchange Online'da SearchMailbox cmdlet'i kullanımdan kaldırılmıştır ve bunun yerine ComplianceSearch cmdlet'lerini kullanmanız gerekir. Örneğin, tüm posta kutularında belirli bir konuya sahip tüm etkinlikleri bulmak için şu komutları çalıştırın:

New-ComplianceSearch -Name DeleteITMeeting -ContentMatchQuery "kind:meetings AND subject:weekly_it_meeting" -ExchangeLocation all
Start-ComplianceSearch -identity DeleteITMeeting
Get-ComplianceSearc -identity DeleteITMeeting | fl

Görev tamamlandıktan sonra (

Status=Completed

), bulduğu etkinlikleri silebilirsiniz:

New-ComplianceSearchAction -SearchName DeleteITMeeting -Purge

İlgili makaleler