【问题标题】:Move Outlook Messages Powershell移动 Outlook 邮件 Powershell
【发布时间】:2014-12-18 09:51:08
【问题描述】:

我正在尝试编写一个脚本,从超过 10 天的文件夹中的邮件项目下载附件,将它们保存到我的硬盘驱动器,然后将邮件项目移动到已删除的项目文件夹。到目前为止,附件下载工作正常,但是当我添加移动电子邮件的代码时,它只适用于我文件夹中的一半电子邮件。代码如下所示。任何帮助表示赞赏。

$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)
    }
}

【问题讨论】:

  • $Folder 是什么类型的对象?您也可以尝试使用 Move-Item cmdlet 而不是使用对象 .Move() 方法
  • Move-Item 给了我一条错误消息。 + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand $Folder is a System.__ComObject.
  • 这可能是因为路径是 $folder.item 的属性,而不是项目本身。它是哪种类型的comobject?
  • 你能告诉我如何找到它吗?老实说,我不确定。
  • 发布创建 $folder 的代码行,可能类似于 $Folder = New-object -comobject Shell.Application$Folder = $sh.Namespace($filepath)

标签: email powershell outlook


【解决方案1】:

能够通过更改循环结构来解决问题。我没有使用 foreach,而是改为迭代计数器。

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

这解决了问题。

【讨论】:

  • 很高兴您自己找到了一些东西。我只是想知道当有 Get-Item 和 Move-Item cmdlet 之类的东西时,为什么要使用 comobjects 来执行此操作
【解决方案2】:

你也可以暴力破解它并做

while ($mails.count -gt 0)
{
    foreach ($mail in $mails) 
    {
        $mail.move($archive)
    }
    $mails = ($inbox.folders.Item("test")).items
}   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2015-11-05
    • 2016-05-15
    • 2021-05-22
    • 2010-09-25
    • 2017-11-04
    • 1970-01-01
    相关资源
    最近更新 更多