Posta Kutularından Uyumluluk Kayıtlarını Almak İçin Graph SDK’yı Kullanın.
Bu makalemizde, Copilot etkileşimleri hakkında içgörüler keşfetmek için belirli alıcılara gönderilen iletileri bulmayı araştırıyor olacağız.
Bu konu diğer co-pilot makalelerinden biraz farklıdır çünkü IPM olmayan bir klasörde depolanan öğelere bakacağız. IPM olmayan klasörler, Outlook gibi normal e-posta istemcilerine açık olmayan sistem klasörleridir. Ancak klasörler, eDiscovery ve diğer Purview uyumluluk çözümleri tarafından kullanılmak üzere oluşturulan uyumluluk kayıtları da dahil olmak üzere birçok ilginç bilgiyi depolar.
Co-Pilot Etkileşimleri için Uygunluk Kayıtları
Copilot etkileşimleri için yakalanan uyumluluk kayıtları aramamızın hedefidir. Birisi Copilot for Microsoft 365’ten bilgi istediğinde, Microsoft 365 etkileşimi kaydetmek için denetim kayıtlarını yakalar. İnsanların Copilot for Microsoft 365’i nasıl kullandıklarına dair genel bir bakış elde etmek için denetim kayıtlarını çıkarmak ve analiz etmek mümkündür . Aynı zamanda, etkileşimler Copilot ile kullanıcı arasındaki bir sohbet biçimini aldığından, Microsoft 365 uyumluluk kayıtlarını kullanıcının posta kutusundaki gizli TeamsMessagesData klasöründe yakalar. Kanal konuşmalarına gönderilen mesajlar için uyumluluk kayıtları, ana bilgisayar ekibi tarafından kullanılan grup posta kutusundaki TeamsMessagesData klasöründedir.
Denetim kayıtları, bir eylemin gerçekleştiğini ve eylemi kimin gerçekleştirdiğini kaydetmek için belirli bir bilgi türünü yakalar. Uyumluluk kayıtlarının işlevi, eDiscovery ve diğer uyumluluk çözümleri için kullanılabilecek bilgileri yakalamak olduğundan , veriler farklıdır. Aslında, uyumluluk kayıtları, gönderilme tarihi, oluşturulma tarihi, gönderen, alıcı ve mesaj gövdesi gibi özelliklere sahip mesaj öğelerinin değiştirilmiş ve eksik bir sürümüdür. Kimsenin size Teams’in mesajları Exchange Online’da sakladığını söylemesine izin vermeyin. Exchange Online üzerinde saklandığı söylenen öğeler uyumluluk kayıtlarıdır.
Microsoft 365 alt yapısının uyumluluk kayıtları oluşturduğu tek iş yükleri Teams ve Copilot değildir. Benzer düzenlemeler Viva Engage (Yammer) mesajları ve Planner için de mevcuttur, ancak bu uyumluluk kayıtları farklı klasörlerde tutulur.
TeamsMessagesData klasörüne erişebilir ve MFCMAPI yardımcı programıyla orada saklanan Teams ve Copilot uyumluluk kayıtlarını görüntüleyebilirsiniz . Bir uyumluluk kaydındaki PR_HTML özelliği, Copilot ile kullanıcı arasındaki etkileşimin ayrıntılarını tutar. Örneğin, Şekil 1, kullanıcı bir Word belgesini açtığında kaydedilen bir uyumluluk kaydının ayrıntılarını gösterir ve Copilot belge içeriğinin madde işaretli bir özetini otomatik olarak oluşturur .
TeamsMessagesData Klasörü için Tanımlayıcıyı Bulma
Bir betik bir klasörden uyumluluk kayıtlarını alabilmeden önce, öğeleri nasıl bulacağını bilmelidir. Grafik terimlerinde, bu klasör tanımlayıcısını bilmek anlamına gelir. Sorun, Grafik API’leri IPM olmayan klasörleri listelemediğinde klasör tanımlayıcısının nasıl bulunacağıdır (Kurtarılabilir Öğeler, iyi bilinen bir klasör olduğu için dikkate değer bir istisnadır ).
Çözümlerden biri , TeamsMessagesData klasörünün ayrıntılarını almak için Get-ExoMailboxFolderStatistics cmdlet’ini çalıştırmaktır .
[array]$Folders = Get-ExoMailboxFolderStatistics -Identity $User.Id -FolderScope NonIPMRoot | Select-Object Name, FolderId
$TeamsMessagesData = $Folders | Where-Object {$_.Name -eq "TeamsMessagesData"}
Name FolderId
---- --------
TeamsMessagesData LgAAAAB+7ILpFNx8TrktaK8VYWerAQA3tTkMTDKYRI6zB9VW59QNAAMBRPnuAAAB
Exchange Online tarafından klasör tanımlayıcı çıktısı StoreId adlı bir format kullanır. EntryId değerini Graph API istekleri tarafından kullanılan biçime dönüştürmek için ( Invoke-MgTranslateUserExchangeId cmdlet’ini kullanarak) en sonunda translateExchangeIds API’sini çağırmadan önce StoreId’yi EntryId biçimine dönüştürmemiz gerekir. Bu biçime RestId denir. Bu açıklamada çok fazla tanımlayıcı özelliği türü var, ancak önemli olan, Get-ExoMailboxFolderStatistics tarafından çıktısı alınan değeri Graph ile kullanılabilir hale getirmek için dönüştürmemizdir . Klasör tanımlayıcılarıyla ilgili ayrıntılar bu makalede bulunabilir .
Co-Pilot Etkileşimlerini Bulma
Bir klasör tanımlayıcısı mevcut olduğunda, Copilot tarafından gönderilen sohbet mesajları için uyumluluk kayıtlarını bulmak basittir. Bir mesajda yalnızca bir gönderici vardır ve Graph filtreleri göndericiye karşı oldukça iyi hassastır. Dikkat edilmesi gereken nokta e-posta adresi yerine göndericinin görüntü adını kontrol etmemizdir.
[array]$Items = Get-MgUserMailFolderMessage -UserId $User.Id -MailFolderId $RestId -All -PageSize 500 -Filter "(ReceivedDateTime ge $StartDate and ReceivedDateTime le $EndDate) and (sender/emailAddress/name eq '$CP0' or sender/emailAddress/name eq '$CP1' or sender/emailAddress/name eq '$CP2' or sender/emailAddress/name eq '$CP3' or sender/emailAddress/name eq '$CP4' or sender/emailAddress/name eq '$CP5') "
-Property Sender, SentDateTime, Body Preview, ToRecipients
Co-Pilot’un kiracı içinde ne bir posta kutusu ne de bir hesabı vardır, bu nedenle bir SMTP adresi yoktur. Emailaddress özelliği yalnızca “PowerPoint’te Copilot” ve “Microsoft 365 sohbeti” gibi görüntü adlarını tutar. Bu nedenle filtre, uyumluluk kayıtlarında yakalanan görüntü adlarına karşı çalışır.
Copilot Tarafından Alınan Mesajları Bulma
Copilot tarafından alınan mesajları bulmaya çalışırken işler farklıdır. Bunlar kullanıcılar tarafından girilen istemlerdir, bu nedenle bilgiler oldukça ilginç olabilir. Belirli bir adres tarafından alınan mesajları bulmak için, uyumluluk kayıtlarında yakalanan alıcı verilerine göre arama yapmalıyız. Önemli bir teknik fark, bir mesajın farklı türlerde birçok alıcıya sahip olabilmesidir. Grafik, bir mesaj için to, cc ve bcc alıcılarından oluşan bir koleksiyon oluşturur, ancak soru, özellikle Copilot kayıtları yalnızca bir görüntüleme adı depoladığında, Copilot’a gönderilen mesajlar için uyumluluk kayıtlarının nasıl bulunacağıdır.
İlk sorun, Graph’ın mesajları bir alıcıya (SMTP adresi veya görüntü adı) göre filtrelemeyi desteklememesidir . toRecipients , ccRecipients veya bccRecipients özelliklerine göre filtreleme yapamazsınız .
Bir alıcıyı filtreleyememek hayal kırıklığı yaratıyor. Microsoft’un tavsiyesi, mesaj koleksiyonu için aranabilir bir özellik kullanarak klasördeki mesajları listele API’sini kullanarak bir Grafik araması çalıştırmaktır.
Copilot etkileşimleri kullanıcılar arasında değildir, bu nedenle uyumluluk kayıtları bir SMTP adresi içermez. Kayıtlar , toRecipients özelliğinde “Word’de Copilot” gibi bir görüntüleme adı içerir. Microsoft’un belgelerine göre , adresler için aranabilir öğeler SMTP adresi, takma ad ve görüntüleme adını içerir, bu nedenle bu ihtiyaca uyuyor gibi görünüyor. Teoriyi test etmek için Copilot’a gönderilen iletileri arayacağız ve isteği çalıştırmak için Invoke-MgGraphRequest cmdlet’ini kullanacağız. Bu örnek, alıcıları kontrol eden, cc ve bcc yapan participants özelliğini kullanır.
$Uri = ('https://graph.microsoft.com/V1.0/users/{0}/mailfolders/{1}/messages?$search="participants:copilot"' -f $user.id, $restid)
[array]$Data = Invoke-MgGraphRequest -Method Get -Uri $Uri
Ne yazık ki arama hiçbir şey döndürmüyor. Yöntemin işe yaradığını biliyoruz çünkü istek Graph Explorer’dan geçtiğinde Gönderilen Öğeler gibi IPM klasörleri için başarılı oluyor (Şekil 2).
Alıcıları aramadaki yetersizlik birçok nedenden kaynaklanıyor olabilir. Örneğin, Microsoft TeamsMessagesData klasörü için mesaj deposu dizinine erişimi engellemiş olabilir çünkü amaçlanan arama erişimi eDiscovery üzerindendir. Herhangi bir nedenden ötürü, Copilot tarafından alınan istemler için uyumluluk kayıtlarını bulmanın bir yoluna ihtiyacımız var.
İleti alıcılarını aramak için Outlook MAPI API’sini kullanmamız gerek. Bu yöntem, alıcıların görüntü adlarını içeren tek değerli genişletilmiş özelliği tam bir eşleşme için kontrol eder. Bu nedenle, Word’de Copilot’a gönderilen istemler için uyumluluk kayıtlarını bulmak üzere şuna benzer bir komut çalıştırabiliriz.
[array]$Items = Get-MgUserMailFolderMessage -UserId $User.Id -MailFolderId $RestId -All -PageSize 500 -Filter "singleValueExtendedProperties/any(ep:ep/id eq 'String 0x0E04' and ep/value eq 'Copilot in Word')"
Daha da iyisi, birçok farklı uygulamada Copilot’a gönderilen etkileşimler için uyumluluk kayıtlarını bulmamız gerektiğinden, bir alt dize (“contains”) sorgusu gerekli öğeleri bulabilir. İşte Get-MgUserMailFolderMessage cmdlet’iyle kullandığım filtre.
[array]$ItemsReceived = Get-MgUserMailFolderMessage -UserId $User.Id -MailFolderId 'TeamsMessagesData' -All -PageSize 500 -Property Sender, SentDateTime, BodyPreview, ToRecipients -Filter "(ReceivedDateTime ge $StartDate and ReceivedDateTime le $EndDate) AND (singleValueExtendedProperties/any(ep:ep/id eq 'String 0x0E04' and contains(ep/value,'Copilot in')))"
Geriye kalan tek şey Microsoft 365 business chat tarafından alınan mesajları bulmak veya daha doğru bir ifadeyle Microsoft 365 Graph-grounded chat. Alt dize sorgusu açıkça bu kayıtları bulamayacak, bu yüzden ayrı bir sorgu çalıştırmamız gerekiyor.
[array]$ItemsChat = Get-MgUserMailFolderMessage -UserId $User.Id -MailFolderId 'TeamsMessagesData' -All -PageSize 500 -Property Sender, SentDateTime, BodyPreview, ToRecipients -Filter "(ReceivedDateTime ge $StartDate and ReceivedDateTime le $EndDate) AND (singleValueExtendedProperties/any(ep:ep/id eq 'String 0x0E04' and ep/value eq 'Microsoft 365 Chat'))"
Üç sorguyu çalıştırdıktan sonra (Copilot tarafından gönderilen öğeleri, uygulamalarda Copilot tarafından alınan öğeleri ve Microsoft 365 iş sohbeti tarafından alınan öğeleri bulma), tek gereken üç diziyi bir araya getirip bulduklarımızı raporlamaktır. Şekil 3, betik tarafından alınan uyumluluk kayıtlarının bir özetini göstermektedir.
Şekil 4, farklı uygulamalardan gönderilen Copilot etkileşimlerinin özetini gösterir. En popüler uygulamaları vurgulamak istediğim için kullanıcı tarafından gönderilen mesajları bu analizden çıkardım. Word’de Copilot için bildirilen yüksek sayı, Copilot’un belgeleri açtığında otomatik özetler üretme biçiminden kaynaklanmaktadır. SharePoint’te Copilot için bildirilen sayı, hem siteler için varsayılan aracılar hem de belirli içerik kümeleri üzerinde akıl yürütmek için oluşturulan özel aracılar olan Copilot aracılarının ayrıntılarını göstermektedir.
Komut dosyasını buradan indirebilirsiniz . Lütfen bu kodun tam olarak geliştirilmiş bir çözüm olmaktan ziyade neyin mümkün olduğunu göstermeyi amaçladığını unutmayın.
Brute Force (Kaba Kuvvet) Yaklaşımı
Uyumluluk tarafından alınan uyumluluk kayıtlarını bulma sorunuyla boğuşurken, kaba kuvvet yaklaşımını kullanmayı düşündüm. Bu, arama dönemiyle eşleşen tüm uyumluluk kayıtlarının alınmasını ve hedeflenen mesajları bulmak için istemci tarafında bir filtre uygulanmasını içerir. Kaba kuvvet diyorum çünkü TeamsMessagesData klasörü Teams sohbetleri için uyumluluk kayıtlarını da tutar. Teams’in popülaritesi göz önüne alındığında, bir kullanıcı yılda on binlerce uyumluluk kaydı oluşturabilir. Copilot ile ilgili kümeyi çıkarmak için büyük miktarda veri almak işi yapmanın kolay bir yolu değildir.
Ancak bazen teknoloji sizi garip şeyler yapmaya zorlar. Bunu akılda tutarak, uyumluluk kayıtlarını almak ve hedef kümesini çıkarmak için gerekli kod aşağıdadır. Kod, bir tarih aralığı (ben bir yıl kullandım) koyarak ve her öğe için asgari bir özellik kümesi talep ederek alınan veri miktarını en aza indirir. Bilgileri Grafikten aldıktan sonra, kayıtlar arasında bir döngü, ihtiyaç duyduğumuz özellikleri bir PowerShell listesine çıkarır ve ardından Copilot tarafından gönderilen etkileşimler için kayıtları çıkarmak üzere filtrelenir.
[array]$Items = Get-MgUserMailFolderMessage -UserId $User.Id -MailFolderId $RestId -All -PageSize 250 -Filter "(ReceivedDateTime ge $StartDate and ReceivedDateTime le $EndDate)" -Property Sender, SentDateTime, BodyPreview, ToRecipients
$Report = [System.Collections.Generic.List[Object]]::new()
ForEach ($Item in $Items) {
$ReportLine = [PSCustomObject][Ordered]@{
Sender = $Item.Sender.emailaddress.Name
To = $Item.Torecipients.emailaddress.name -join ","
Sent = $Item.SentDateTime
Body = $Item.BodyPreview
}
$Report.Add($ReportLine)
}
[array]$CopilotRecords = $Report | Where-Object {($_.Sender -like "Copilot*") -or ($_.To -like "Copilot*") -or ($_.To -eq "Microsoft 365 Chat"}
$CopilotRecords dizisinin çıktısı, Copilot ile kullanıcı arasındaki Copilot etkileşimleri için uyumluluk kayıtlarının özetleridir ve tersi de geçerlidir. İstediğimiz şey budur, oraya ulaşmak biraz çaba gerektirse bile. Kötü haber şu ki, Graph’tan çok sayıda veri almak ve istemci tarafı filtresi uygulamak çok daha yavaştır, genellikle 8 ila 10 kat daha yavaştır.
Filtreleme olmasa bile, Teams uyumluluk kayıtlarını çıkarıp analiz edebilmek bir eDiscovery soruşturma senaryosunda faydalı olabilir. Purview eDiscovery Premium, Teams sohbet dizilerini yeniden oluşturabilir; bu, bir sohbet için tüm uyumluluk kayıtlarına sahipseniz kolayca yapılabilir.