在Powershell中,如何从Outlook的自定义文件夹(在收件箱中)打印出数据?

时间:2015-02-25 20:43:37

标签: powershell

我想针对Outlook收件箱中的自定义文件夹运行Powershell脚本:

enter image description here 这是我到目前为止的查询:

$outlook = new-object -com Outlook.Application

$outlook.Session.GetDefaultFolder(olFolderCalendar).Parent._Folders("UFMS").Items

但是这给了我错误:

Missing ')' in method call.
At line:1 char:48
+ $newFolder = $outlook.Session.GetDefaultFolder( <<<< olFolderCalendar).Parent._Folders("UFMS").Items
    + CategoryInfo          : ParserError: (CloseParenToken:TokenId) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingEndParenthesisInMethodCall

1 个答案:

答案 0 :(得分:1)

嗯,这就是我的工作。它可能有点笨拙,但它确实有效。

$Outlook = New-Object -ComObject Outlook.Application
$Namespace = $outlook.GetNameSpace("MAPI")
$MyAcct = $Namespace.Folders | ?{$_.Name -match $env:USERNAME}
$Inbox = $MyAcct.Folders | ?{$_.Name -match "Inbox"}
$UFMS = $Inbox.Folders | ?{$_.Name -match "UFMS"}

这会打开Outlook,获取MAPI命名空间,找到您的帐户(基于您的UserID,因此这假定您的AD帐户名称在您的电子邮件地址中),然后它在收件箱的文件夹中查找,然后查看您的收件箱一个名为UFMS的文件夹。然后,您可以使用$UFMS.Items迭代该文件夹中的邮件。

加分:值得记住的是,Outlook会将最早的电子邮件项目列为第1项,并以最旧到最新的格式提供这些项目。要从今天开始收到电子邮件,您可以使用For循环,从集合中的最后一项到第一项,并在当前项目太旧时分解。像这样:

[datetime]$StartDate = ([datetime]::now.ToShortDateString())
$TodaysMail = @()
for($i= ($UFMS.Items.count - 1);$i -ge 0;$i--){
    $Current = $UFMS.Items.item($i)
    if($Current.senton -lt (get-date $StartDate)){break}
    $TodaysMail+=$Current
}

$StartDate=行可能看起来过于复杂,但会使[DateTime]对象等于当天的午夜。