2014-10-22 3 views
0

Я пытаюсь написать сценарий, который загружает вложения из почтовых элементов в папке старше 10 дней, сохраняет их на моем жестком диске, а затем перемещает элементы почты в папку удаленных элементов. Пока загрузка приложений работает нормально, но когда я добавляю код для перемещения электронных писем, он работает только на половину писем в моей папке. Код, показанный ниже. Любая помощь оценивается.Перенести сообщения Outlook Powershell

$Folder.Items | foreach{ 
    $Received = New-Object DateTime 
    $Received = $_.ReceivedTime 

    $howOld = New-Object int 
    $howOld = $Today.subtract($Received) 
    $howOld = $howOld | select-object -ExpandProperty Days 

    $date = $_.ReceivedTime.ToString("MMddyyyy") 

    $howOld 

    if ($howOld -gt 10){ 
      #Save Attachment To Folder 
      $_.attachments | foreach{ 
      $fileName = $_.filename 
      $split = $fileName.Split('.') 
      $fileName = $split[0] 
      $fileExtension = $split[1] 
      $fileName = $fileName + '_' + $date + '.' + $fileExtension 

      $_.saveasfile((Join-Path $filepath $fileName)) 
      } 
     #Move to Deleted Folder 
     $result = $_.Move($deletedFolder) 
    } 
} 
+0

какой тип объекта '$ Folder'? также вы можете попытаться использовать командлет 'Move-Item' вместо использования объектов' .Move() 'method – Paul

+0

Move-Item дал мне сообщение об ошибке. + FullyQualifiedErrorId: PathNotFound, Microsoft.PowerShell.Commands.MoveItemCommand $ Папка - это System .__ ComObject. – halfheartd

+0

Возможно, это связано с тем, что путь является свойством $ folder.item, а не самого элемента. Какой тип комбо-объекта? – Paul

ответ

1

Удалось устранить проблему, изменив структуру петли. Вместо использования foreach я изменился на итеративный счетчик.

$emails = $Folder.Items 
For ($i=($emails.count-1);$i -ge 0;$i--) 

Это исправило проблему.

+0

Рад, что ты что-то нашел. Мне просто интересно, почему вы используете comobjects для этого, когда есть командлеты Get-Item и Move-Item и такие вещи – Paul

0

Вы можете перебирает его также и сделать

while ($mails.count -gt 0) 
{ 
    foreach ($mail in $mails) 
    { 
     $mail.move($archive) 
    } 
    $mails = ($inbox.folders.Item("test")).items 
} 
Смежные вопросы