处理 e-mails 时无法选择(无法过滤)collection

Can't make selection (can't filter) of collection while processing e-mails

我想创建一些 e-mail 处理的自动化。

我关注了 this article,效果很好。总而言之,我的其中一个邮箱有 collection 个 e-mail,但是我无法过滤它们(无法提供 where 方法)。我可以使用 foreach 运算符,但在我看来这不是一个最好的主意(比如使用游标功能来过滤 SQL 中的表值而不是使用 'where' 选项)。

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

通过执行最后一条命令,我得到了 e-mail 中的 collection(collection 中的 System.MarshalByRefObject)。 where{$_ -eq ...} 等常见 collection 的常用方法在这里不起作用。

如果我尝试 where 方法,我会收到一条错误消息 "MethodNotFound"。此外,我无法使用 Get-Member 命令获取此 collection 的所有方法的列表,因为它为我提供了 e-mail object 的方法,而我需要 [=58] 的方法=].

我知道为此 collection 我可以使用以下内容:

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

请给我一些建议,如何在不使用 foreach 的情况下,根据 e-mail object 的某些 属性 的值过滤我的 e-mail。或者请给我正确的参考描述 collection object.

我好笨:(

我要找的是:

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

对不起你的时间。

您需要使用 Items.Find/FindNext or Items.Restrict。 不要循环遍历文件夹中的项目以寻找匹配项(这就是您的代码所做的)——每个项目都需要打开。让商店供应商来做繁重的工作。

我之前的回答很好,但是在处理 500 多封电子邮件时速度很慢。所以我找到了另一个解决方案: Items.Restrict("[SentOn]>'21/12/2015 00:01'")

restrict 选项允许使用过滤选项([senton] - 属性 of email object)。而且速度快一百倍!

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

不客气:)