如何更改脚本以按文件名而不是发件人名保存附件?

时间:2019-01-29 17:42:21

标签: powershell outlook email-attachments

我正在使用以下脚本。通过发件人名称将附件保存在指定的文件夹中效果很好。但是,如果发件人名称不变,则仅保存附件中的1个与所有附件中的一个。我假设这是一个写错误。如何更新下面的脚本,以所有符合过滤条件的附件按实际附件名称而不是发件人名称保存。

$o = New-Object -comobject outlook.application
$n = $o.GetNamespace("MAPI")
$f = $n.PickFolder()
$filepath = "c:\test"

$f.Items| foreach {$SendName = $_.Sendername
$_.attachments|foreach {
$_.filename
If ($_.filename.Contains("pdf")) {
$_.saveasfile((Join-Path $filepath "$SendName.pdf"))}}}`

任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:2)

所以让我们在这里跟随兔子洞吧。

我们可以转到Outlook Object Model,并寻找Attachments Object,因为我们看到您正在遍历附件:

$_.attachments|foreach

我们在页面上看到:

  

包含一组附件对象

所以我们看一下Attachment Object Page,看一下Properties,我们看到FileName有一个属性

因此要按附件名称发送,我们可以这样做:

$o = New-Object -comobject outlook.application
$n = $o.GetNamespace("MAPI")
$f = $n.PickFolder()
$filepath = "c:\test"

$f.Items| foreach {
    $FileName= $_.FileName
    $_.attachments|foreach {
        $_.filename
        If ($_.filename.Contains("pdf")) {
            $_.saveasfile((Join-Path $filepath "$FileName"))
        }
    }
}