我想创建一些电子邮件处理的自动化。
我跟着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
的情况下按电子邮件对象的某些属性值过滤我的电子邮件。或者请给我正确的参考这个集合对象的描述。
答案 0 :(得分:0)
我太蠢了:(
我在寻找的是:
$mailsInEventFolder | ? {$_.SenderName -eq 'SomeName'}
抱歉你的时间。
答案 1 :(得分:0)
您需要使用Items.Find/FindNext或Items.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)。
不受欢迎:)