我正在尝试在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
这些字段是否可以通过我的Exchange服务器中的某种安全措施进行保护?
我的代码中有什么问题吗?
为什么我无法访问这些值?我该如何解决这个问题?
我对Outlook的Powershell脚本很新,但是在我发布之前我已经对我的问题进行了公平的研究,我根本找不到任何解释。 我已经阅读了一些名为PropertyAccessor的信息,但从未在powershell中找到过这个信息,仅针对vba。这可能是一个可能的解决方案吗?
谢谢。
答案 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实例上测试过,这似乎正常。
希望这会有所帮助:)