Powershell按标题搜索Outlook电子邮件并提取最新的Excel(.xls)文件

时间:2018-02-02 16:07:28

标签: excel powershell outlook automation

我是一个测试组织的实习生。 我正在尝试自动执行一项非常长的任务,并且我正在使用Powershell来完成大部分工作。

任务: 我们有一封公司电子邮件,我们在白天收到很多电子邮件。当然,我们制定了一些规则,使我们的生活更加可以忍受。 每天都会有特定的电子邮件发送到“XYZ”文件夹,我想使用以下条件搜索最新的电子邮件: - 电子邮件标题 - 包含搜索字符串的最新电子邮件

这些电子邮件中的每一封都包含一个Excel文件。如果正文的标题符合搜索条件,我想下载最新的附件。除非有办法打开并解析文件而不下载它。

我是Powershell的新手,但我有编程背景,所以不要被推回去简化自己。

祝你好运, 亚历

1 个答案:

答案 0 :(得分:3)

你需要自己完成大部分工作,但这是来自我所拥有的类似脚本的代码,我已将其分解以使其更具可读性,希望能帮助您入门。

#Params
$Account = "Mailbox.Searchme@contoso.com"
$Folder = "Inbox"
$SubjMatch = "Reports"

#Create outlook COM object to search folders
$Outlook = New-Object -ComObject Outlook.Application
$OutlookNS = $Outlook.GetNamespace("MAPI")

#Get all emails from specific account and folder
$AllEmails = $OutlookNS.Folders.Item($Account).Folders.Item($Folder).Items
#Filter to emails with attatchments and specific subject line (-match uses RegEx)
$ReportsEmails = $AllEmails | ? { ($_.Subject -match $SubjMatch) -and ($_.Attachements.Count -gt 0) }
#Grab the most recently recieved email
$LatestReportEmail = $ReportsEmails | Sort ReceivedTime | Select -Last 1

#Get the xlsx file(s) and save them
$LatestReportEmail.Attachments | ? {$_.FileName -match "\.xlsx$"} | % {
    $_.SaveAsFile("C:\path\to\$($_.FileName)")
}

#Quit Outlook COM Object
$Outlook.Quit()

你应该在尝试运行之前关闭Outlook,这对于大文件夹(主要是因为某些原因的过滤器部分)来说也可能非常慢,祝你好运。