Проблема с перемещением нескольких элементов из одной папки Outlook в другую - Powershell - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь выбрать несколько электронных писем из папки входящих сообщений outlook через картографическую адресацию и хочу переместить копию этих электронных писем в другую папку в той же папке входящих сообщений.

К сожалению, мой скрипт, кажется, делает все, что хочет, иногда копируя 6 электронных писем, прежде чем остановиться с последующей ошибкой, иногда останавливаясь прямо с первым письмом.

Ошибка:

... "veeam")} |ForEach-Object {$ _. Copy (). Move ($ Namespace.Folders.Item ("$ ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: OperationStopped: (:) [ForEach-Object], COMException + FullyQualifiedErrorId: System.Runtime.InteropServices.COMException, Microsoft.PowerShell.Commands.ForEachObjectCommand

Я не смог найти никакого решения для этого, и я смущен, поскольку в другом почтовом ящике код работает просто отлично.

Конечно, я заранее устанавливаю переменные $Mailbox и $TempWorkPath.

Заранее благодарен за помощь.

Попытка выполнить код в цикле foreachменее производительный и заканчивается той же проблемой.

Около 3 часов поиска в Google мне не помогли.

Простое перемещение объекта приводит к разрыву кода, возможно, из-за индексации?

Add-Type -Assembly "Microsoft.Office.Interop.Outlook"
$OutlookSession = New-Object -ComObject Outlook.Application
$Namespace = $OutlookSession.GetNameSpace("MAPI")
$Namespace.Folders.Item("$Mailbox").Folders.Item("Posteingang").Items.Restrict('[UnRead] = True') | Where-Object {($_.Subject -match "ackup") -or ($_.SenderEmailAddress -match "veeam")} | ForEach-Object {$_.Copy().Move($Namespace.Folders.Item("$Mailbox").Folders.Item("Posteingang").Folders.Item("$TempWorkPath"))} | Out-Null

<# Делать что-то с выбранными / скопированными письмами #>

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($OutlookSession) | Out-Null
$OutlookSession = $null | Out-Null

В теории, основанной на моих тестах в другой папке, это должно работать идеальноВ общем, создайте копию электронного письма, переместите его в мою папку, и после этого я смогу что-то с этим сделать.

1 Ответ

0 голосов
/ 24 сентября 2019

Ну, я думаю, я нашел способ обойти эту проблему.Кажется, что выполнение команды в цикле while вместо цикла foreach работает лучше.

$Inbox = $Namespace.Folders.Item("$Mailbox").Folders.Item("Posteingang").Items.Restrict('[UnRead] = True') | Where-Object {($_.Subject -match "ackup") -or ($_.SenderEmailAddress -match "veeam")}

$MailCounter = $Inbox.Count
$HelperForCounting = 0

while ($MailCounter -gt $HelperForCounting)
{
    $Inbox[$MailCounter].Copy().Move($Namespace.Folders.Item("$Mailbox").Folders.Item("Posteingang").Folders.Item("$TempWorkPath"))
    $MailCounter = $MailCounter - 1
}

Greetings

...