在Powershell中使用Outlook PropertyAccessor

时间:2016-02-22 12:31:49

标签: email powershell outlook

我正在尝试在Powershell ISE中完成一项简单的任务。 我希望能够阅读内容和标题以及电子邮件,并使用write-host在控制台中进行打印。

我想打印发件人的姓名,然后是他的地址。我想打印出接收器和电子邮件的主题,然后是邮件的正文/内容。我虽然这是一件容易的事,但我有一个小小的挫折。

为了最大限度地减少返回值,我创建了一个文件夹,里面只有一封电子邮件和一条短信息,因此很容易打印出来并确认。

问题:

我只能打印出我想要的一个字段。当我运行脚本时,我只获得“主题”字段的值。所有其他人(SenderName,SenderAddress,To)都没有给出值,但经过研究后我确认我确实得到了这些属性的对象。

守则

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

$box = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderJunk)
$mails = $box.items

$mails|select  SenderName, SenderEmailAddress, To, Subject

返回值

enter image description here

  • 这些字段是否可以通过我的Exchange服务器中的某种安全措施进行保护?

  • 我的代码中有什么问题吗?

  • 为什么我无法访问这些值?我该如何解决这个问题?

我对Outlook的Powershell脚本很新,但是在我发布之前我已经对我的问题进行了公平的研究,我根本找不到任何解释。 我已经阅读了一些名为PropertyAccessor的信息,但从未在powershell中找到过这个信息,仅针对vba。这可能是一个可能的解决方案吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

您尝试打印的字段应默认为afaik。

我认为它可能与您在打印时打印和连接属性的方式有关。

如果您执行以下操作,则应显示发件人电子邮件地址的完整容器内容:

foreach($m in $mails){
    write-host "From:    $($m.GetProperty) $($m.SenderEmailAddress)"
    write-host "Subject:   $($m.Subject)"
}  

我建议您只选择所需的属性,而不是使用for循环并使用write-host。

示例:

$mails|select SenderEmailAddress, SenderName, Subject, ReceivedTime

您还可以通过执行以下操作来检查邮件对象上可用的属性:

$mails|get-member

在这里的outlook 2007实例上测试过,这似乎正常。

希望这会有所帮助:)