针对Outlook邮箱的Powershell脚本正在选择旧数据

时间:2014-04-08 14:48:27

标签: c# email powershell outlook


我正在进入这个项目,其中必须交叉检查推入文件夹的电子邮件是否到达。 因此,为了达到这个目的,我使用了powershell脚本连接到邮件文件夹并收集数据。 代码粘贴在下方。

 Add-Type $class -ReferencedAssemblies Microsoft.Office.Interop.Outlook
 $class = @"
 using Microsoft.Office.Interop.Outlook;public class MyOL
 {
public MAPIFolder GetInbox(string userName)
{
    Application oOutlook = new Application();
    NameSpace oNs = oOutlook.GetNamespace("MAPI");
    Recipient oRep = oNs.CreateRecipient(userName);
    MAPIFolder inbox = oNs.GetSharedDefaultFolder(oRep, OlDefaultFolders.olFolderInbox);
    return inbox;
 }
}
 "@
  Add-Type $class -ReferencedAssemblies Microsoft.Office.Interop.Outlook

 $MyOL = New-Object MyOL
$olInbox = $MyOL.GetInbox("mailbox")

 $olInbox.items | Select-Object -Property Subject, ReceivedTime, Importance, SenderName

但是此代码正在收集仅一周的数据!而不是新鲜的电子邮件。我试过环顾四周,发现这可能与邮箱中的索引有关。所以,我也试过禁用它,但徒劳无功。

1 个答案:

答案 0 :(得分:0)

不确定为什么不使用ComObject for Outlook。如果您只想要最近的项目,那么这应该可以获得过去24小时内收到的项目:

$MSOut = new-object -ComObject Outlook.Application
$MAPI = $MSOut.GetNamespace("MAPI")|?{$_.SMTP -match "Some.User@Company.com"}
$Account = $MAPI.Folders|?{$_.Name -match "Some.User@Company.com"}
$Inbox = $Account.folders | ?{$_.Name -match "Inbox"}
$24hours = (get-date).AddDays(-1)
$RecentItems = $Inbox.Items|?{$_.ReceivedTime -gt $24hours}

如果你想获得某些属性,你可以运行你的选择,如:

$RecentItems | Select -Property Subject, ReceivedTime, Importance, SenderName