2015-06-02 3 views
1

Я пытаюсь записать информацию об отправителе/​​предмете всех писем в моем почтовом ящике Outlook в файл csv, а затем переместить электронные письма в подпапку моего почтового ящика (называемого «После») с помощью Powershell , Файл CSV создается правильно с информацией электронной почты, но только первая половина + 1 электронная почта фактически перемещается в подпапку. Вот мой код:Перемещение электронных писем в подпапку с Powershell

$olFolderInbox = 6; 
$outlook = new-object -com outlook.application; 
$mapi = $outlook.GetNameSpace("MAPI"); 
$inbox = $mapi.GetDefaultFolder($olFolderInbox); 
$inbox.items|Select SenderEmailAddress,subject|Export-Csv C:\Scripts\Testing.csv -NoTypeInformation; 
ForEach ($Item in $inbox.items){ 
    try{ 
     $Item.Move($inbox.Folders.Item("After")) | out-null; 
    }catch{ 
     Write-Host "Failed to move item", $Item.Id.UniqueId; 
    } 
} 

Это мой первый опыт использования Powershell, поэтому любая помощь очень ценится!

ответ

0

Move() изменяет коллекцию. Используйте нижний цикл «для» (от элементов. Снизьте до 1) вместо «foreach».

+0

Так что «ForEach ($ Item in $ inbox.items)» должно быть For ($ i = 0; $ i -le $ inbox.Count; $ i ++)? – Tim

+0

Нет, вам нужно перейти от Items.Count до 1. Имейте в виду, что все коллекции Outlook основаны на 1, а не 0. –

+0

So For ($ i = ($ inbox.items.count-1); $ i - ge 0; $ i--)? Кроме того, я вижу, что cmdlet Move-item лучше, чем $ _. Move(). Это то, что я должен использовать вместо этого? – Tim

Смежные вопросы