列出具有附件名称的共享邮箱上的所有电子邮件

时间:2014-02-21 17:14:43

标签: powershell outlook

我创建了一个非常简单的PowerShell脚本来收集有关共享邮箱文件夹中所有电子邮件的一些基本信息。

Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null
$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type] 
$outlook = new-object -comobject outlook.application
$namespace = $outlook.GetNameSpace("MAPI")
$Inbox = $namespace.pickfolder()
$Inbox.items | Select-Object -Property Categories, Attachments, Subject, ReceivedTime

这正在按预期工作,打印一个可以导出为CSV的表格,但Attachments属性只打印System.__ComObject。因此,我需要将“附件”列替换为附件名称列表($_.Attachments::DisplayName

我尝试迭代结果来解决这个问题,例如:

$Inbox.items | Select-Object -Property Categories, Attachments, 
Subject, ReceivedTime | ForEach-Object -Process {$_.Attachments::DisplayName}

但这只打印附件信息而不打印其余数据。此外,在{}之间添加所有字段会导致powershell每行打印一个字段,因此无法将其导出为CSV。

您能帮我正确更换“附件”栏吗?

1 个答案:

答案 0 :(得分:3)

更改最后一行:

$Inbox.items |Select-Object -Property Categories,Subject,   
ReceivedTime,@{name="Attachments";expression={$_.Attachments|%{$_.DisplayName}}}

然后,您可以将其发送到| ft -wrap以“展开”附件列。