Получение самого старого элемента в Outlook через Powershell - PullRequest
0 голосов
/ 17 мая 2018

Я работаю над чем-то, что извлекает информацию из моего настольного приложения Outlook.Он работает для большинства папок, на которых я его пробовал, но для некоторых, которые почти десять лет отправляют электронные письма, я получаю «Исключение при получении ReceivedTime»: «Недостаточно памяти для продолжения выполнения программы».Вот что я пытаюсь:

# New Outlook object
$ol = new-object -comobject "Outlook.Application";

# MAPI namespace
$mapi = $ol.getnamespace("mapi");

# Folder/Inbox
$folder =  $mapi.Folders.Item('name@email.com').Folders.Item('Inbox')

# Sort by the Received Time
$contents = $folder.Items | sort ReceivedTime

# Get the first element in the array, convert to JSON, and then output to file
echo $contents[0] | convertTo-Json | Out-File C:\Users\ME\outlook_1.json -Encoding UTF8

Есть ли лучший способ приблизиться к этому?Я использую Powershell 5.1.

РЕДАКТИРОВАТЬ: я также пробовал это, который циклически перебирает массив, а затем разбивает на первый экземпляр, но получил ту же ошибку:

# New Outlook object
$ol = new-object -comobject "Outlook.Application";

# MAPI namespace
$mapi = $ol.getnamespace("mapi");

# Folder/Inbox
$folder =  $mapi.Folders.Item('name@email.com').Folders.Item('Inbox')

# Sort by the Received Time
$contents = $folder.Items | sort ReceivedTime

$i = 1
foreach($item in $contents){
    if (-not ([string]::IsNullOrEmpty($item))){
        echo $item | convertTo-Json | Out-File Out-File C:\Users\ME\outlook_1.json -Encoding UTF8-Encoding UTF8
        Break
    }
}

1 Ответ

0 голосов
/ 17 мая 2018

Сортируйте коллекцию элементов, используя Items.Sort("ReceivedTime", false), затем прочитайте первый элемент, используя Items(1).

. Убедитесь, что вы храните коллекцию Items в переменной, а не обращаетесь к MAPIFolder.Items несколько раз, в противном случае выбудет получать новый Items объект каждый раз, когда вы это делаете.

РЕДАКТИРОВАТЬ: я ОП вопроса и ставлю здесь правильный код для тех, кто может быть таким же плотным, как я, и нетизначально осознай, что говорится!

# New Outlook object
$ol = new-object -comobject "Outlook.Application";

# MAPI namespace
$mapi = $ol.getnamespace("mapi");

$folder =  $mapi.Folders.Item('name@gmail.com').Folders.Item('Inbox')

# Get the items in the folder
$contents = $folder.Items

# Sort the items in the folder by the metadata, in this case ReceivedTime
$contents.Sort("ReceivedTime")

# Get the first item in the sorting; in this case, you will get the oldest item in your inbox.
$item = $contents.GetFirst()
echo $item

# If instead, you wanted to get the newest item, you could do the same thing but do $item = $contents.GetLast()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...