Более широкий контекст заключается в том, что я пытаюсь написать некоторый код powershell для извлечения списка содержимого моего почтового ящика Office 365 в форме CSV, включая размер каждого элемента, чтобы помочь мне в последующем анализе того, где находится хранилище в моем почтовый ящик занят. Я вижу, как эта функциональность также приведет к другим полезным инструментам.
Я обнаружил этот пример/код POC от Александра Резника EXchangeOnline2CSV это помогло мне во многом. Однако мне не удалось успешно расширить его, чтобы извлечь размер почты (в байтах).
Я нашел этот похожий вопрос, используя API graph.microsoft.com. И из этого я сделал вывод (возможно, ошибочный), что модуль powershell, который я использую (Microsoft.Graph.Mail), получает данные из того же источника, и что размер сообщения является «расширенным свойством с одним значением» почтового объекта .
Документы Powershell MS Graph немного скудны, однако в них есть командлет, который кажется подходящим кандидатом для взаимодействия с этими данными Get-MgUserMessageSingleValueExtendedProperty
Я также нашел аналогичный код в исходниках Exch-Rest, который выглядит так, как будто он делает то, что мне нужно (признаю, что я не совсем понимаю), но это дало мне надежду, что то, что я пытаюсь сделать, на самом деле возможное. Этот код включает в себя вызов для извлечения «MessageSize» с использованием того же идентификатора свойства, что и выше «0x0E08». Get-EXRKnownProps и Get-EXRTaggedProperty, кажется, не делают ничего особенного для его извлечения (хотя я не совсем слежу за всем этим).
Однако мои попытки заставить Get-MgUserMessageSingleValueExtendedProperty
вернуть хоть что-нибудь оказались довольно тщетными.
Я чувствую, что это либо проблема типа «это еще не реализовано», либо проблема типа «вам не хватает точки с запятой», но на данный момент мой google-fu подвел меня, и я не могу найти примеры того, что я Я пытаюсь сделать это, буду признателен за любую помощь.
Пауэршелл — 5.1.19041.1682 Microsoft.Graph — 1.16.0
Вот некоторый урезанный код, который я использовал для установления соединения и тестирования командлета Get-MgUserMessageSingleValueExtendedProperty
, в том числе во встроенных комментариях ошибки, которые он возвращал.
(UPN, очевидно, изменился, однако это работает для меня и, например, возвращает разумные значения для темы)
`
$UPN = "[email protected]"
Connect-MgGraph -Scopes "Mail.Read"
$folders = Get-MgUserMailFolder -UserId $UPN -All
write-host "Current folders:"
$folders.DisplayName
$folder = $folders | Where-Object { $_.DisplayName -eq "Inbox" }
$mails = Get-MgUserMailFolderMessage -All -UserId $UPN -MailFolderId $folder.Id -Top 1
Write-Host "No. Of Emails: $($mails.count)"
foreach($currEmail in $mails){
Write-Host "Subject: $($currEmail.Subject)"
# PidTagMessageSize = 0x0E08
# Can't get the right form for the following....
$mailSizeInBytes = Get-MgUserMessageSingleValueExtendedProperty -InputObject $currEmail -Property "0x0E08"
# Errors as Get-MgUserMessageSingleValueExtendedProperty : The pipeline has been stopped.
$mailSizeInBytes = Get-MgUserMessageSingleValueExtendedProperty -MessageId $currEmail.Id -UserId $UPN -Property "0x0E08"
# Errors as Get-MgUserMessageSingleValueExtendedProperty : Parsing OData Select and Expand failed: An identifier was expected at position 0.
$mailSizeInBytes = Get-MgUserMessageSingleValueExtendedProperty -MessageId $currEmail.Id -UserId $UPN -Property "LONG 0x0E08"
# Errors as Get-MgUserMessageSingleValueExtendedProperty : Parsing OData Select and Expand failed: Term 'LONG 0x0E08' is not valid in a $select or $expand expression.
Write-Host "Mail Size: $($mailSizeInBytes)"
}
`
Вы можете использовать -expandproperty в Get-MgUserMailFolderMessage, что будет равно $expand в запросе Graph, например
$mails = Get-MgUserMailFolderMessage -All -UserId user@domain -MailFolderId Inbox -Top 1 -ExpandProperty "singleValueExtendedProperties(`$filter=id eq 'long 0x0E08')"
затем
$mails.SingleValueExtendedProperties[0]
Блестяще, это сработало для меня. Мне пришлось использовать
$mails.SingleValueExtendedProperties[0].Value
, чтобы получить реальную цифру, но этот подход работал и распространялся на несколько почтовых отправлений.