如何使用PowerShell下载第一个电子邮件附件?

wz3gfoph  于 2022-12-18  发布在  Shell
关注(0)|答案(1)|浏览(148)

我得到了一个每周自动发送的电子邮件附件,并与outlook规则,它被保存在我的收件箱中的一个文件夹中。我的目标是创建一个PowerShell脚本,从最新的“接收时间”的电子邮件下载附件。我已经设法排序文件夹中的对象“接收时间”,并获得列表中的最新电子邮件:“$emails[0]",我可以看到附件的名称,但我似乎找不到如何下载文件本身。我得到的错误如下:“不能对空值表达式调用方法。"
我的代码看起来像这样:

$outlook = New-Object -ComObject outlook.application
$mapi = $outlook.GetNamespace("MAPI");

#Get Folder path
$filePath = "C:\Temp\test"
$inbox = $mapi.GetDefaultFolder(6) 
$inbox.Folders | Select-Object FolderPath
$olFolderPath = "\\DanielMol@sodastream.com\Inbox\compliance"

#Get Emails Items from folder
$targetFolder = $inbox.Folders | Where-Object { $_.FolderPath -eq $olFolderPath } 

#Sort Emails in folder by date
$emails = $targetFolder.Items | Sort-Object ReceivedTime -Descending

#download attachements
$emails[0].Attachments | Select-Object $_.saveasfile(($filePath))

我使用本指南下载附件,但我的用例与本文中描述的用例略有不同:https://bronowski.it/blog/2020/09/saving-outlook-attachments-with-powershell/
抱歉,如果这是一个非常简单的任务,我是新的PowerShell和刚刚学习自动化。非常感谢:)

2q5ifsrm

2q5ifsrm1#

首先,我注意到了下面的代码:

#Sort Emails in folder by date
$emails = $targetFolder.Items | Sort-Object ReceivedTime -Descending

相反,您需要使用Items类的Sort方法,该方法通过指定的属性对项目集合进行排序。在此方法完成时,集合的索引将重置为1。因此,要获取第一个项目,请使用1索引而不是0。

$emails[1].Attachments[1].SaveAsFile(($filePath))

请注意,Attachments对象包含一组Attachment对象,这些对象表示Outlook项目中的附件。使用Attachments属性可返回任何Outlook项目(便笺除外)的Attachments集合。

相关问题