处理电子邮件时无法对收集进行选择(无法过滤)

时间:2015-12-25 12:05:02

标签: email powershell com outlook powershell-v4.0

我想创建一些电子邮件处理的自动化。

我跟着this article,它运作良好。总结,我收到了一个邮箱的电子邮件集合,但是我无法对其进行过滤(无法提供where方法)。我可以使用foreach运算符,但在我看来它并不是一个好主意(比如使用游标功能来过滤SQL中的表值而不是使用'其中'选项)

Add-Type -Assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")

$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)

$mailsInEventFolder = $inbox.Folders.Item('Events').Items

通过实施最后一个命令,我收集了我的电子邮件(System.MarshalByRefObject的集合)。像where{$_ -eq ...}这样的常见集合的常用方法在这里不起作用。

如果我尝试where方法,我收到错误消息" MethodNotFound"。此外,我无法使用Get-Member命令获取此集合的所有方法列表,因为它为我提供了电子邮件对象的方法,我需要收集对象的方法。

我知道对于这个系列我可以使用以下内容:

  • $mailsInEventFolder.Item(int32)
  • $mailsInEventFolder.Item(string)
  • $mailsInEventFolder.Count
  • $mailsInEventFolder.Add(obj)
  • $mailsInEventFolder.Remove(int32)

我在文档中搜索这个正确的对象集时浪费了很多时间,但是我没有成功。

请告诉我如何在不使用foreach的情况下按电子邮件对象的某些属性值过滤我的电子邮件。或者请给我正确的参考这个集合对象的描述。

3 个答案:

答案 0 :(得分:0)

我太蠢了:(

我在寻找的是:

$mailsInEventFolder | ? {$_.SenderName -eq 'SomeName'}

抱歉你的时间。

答案 1 :(得分:0)

您需要使用Items.Find/FindNextItems.Restrict。 不要遍历查找匹配项的文件夹中的项目(这是您编写的代码) - 每个项目都需要打开。让商店提供商做繁重的工作。

答案 2 :(得分:0)

我之前的回答工作正常,但处理500多封电子邮件时速度非常慢。所以我找到了另一个解决方 Items.Restrict(“[SentOn]> '21 / 12/2015 00:01'”)

限制选项允许使用过滤器选项([senton] - 电子邮件对象的属性)。而且它快了一百倍!

这里有一些关于它的文档: https://msdn.microsoft.com/en-us/library/bb220369(v=office.12).aspx (请注意,本文中的所有内容都不适用于PS)。

不受欢迎:)