You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell下载Outlook指定文件夹中最新邮件的附件?

问题分析与解决

你的报错核心是最后一行代码逻辑错误:Select-Object用于筛选对象属性,不能用来调用SaveAsFile方法;同时SaveAsFile需要传入完整文件路径(文件夹+附件文件名),仅传文件夹路径会导致方法调用失败。

修正后的完整代码

$outlook = New-Object -ComObject outlook.application
$mapi = $outlook.GetNamespace("MAPI");

# 附件保存路径
$filePath = "C:\Temp\test"
# 确保保存文件夹存在,不存在则创建
if (-not (Test-Path -Path $filePath)) {
    New-Item -Path $filePath -ItemType Directory | Out-Null
}

$inbox = $mapi.GetDefaultFolder(6) 
$olFolderPath = "\\DanielMol@sodastream.com\Inbox\compliance"

# 获取目标文件夹
$targetFolder = $inbox.Folders | Where-Object { $_.FolderPath -eq $olFolderPath } 

# 按接收时间倒序排序邮件
$emails = $targetFolder.Items | Sort-Object ReceivedTime -Descending

# 处理最新邮件的附件
if ($emails.Count -gt 0) {
    $latestEmail = $emails[0]
    foreach ($attachment in $latestEmail.Attachments) {
        # 拼接完整的保存路径:文件夹+附件名
        $savePath = Join-Path -Path $filePath -ChildPath $attachment.FileName
        # 保存附件
        $attachment.SaveAsFile($savePath)
        Write-Host "已保存附件:$savePath"
    }
} else {
    Write-Host "目标文件夹中没有邮件"
}

# 释放Outlook COM对象(避免进程残留)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlook) | Out-Null

关键修正点

  • 新增文件夹存在性检查:防止因文件夹不存在导致保存失败
  • 替换错误的Select-Object为foreach循环:遍历每个附件并调用SaveAsFile方法
  • 使用Join-Path拼接完整路径:确保SaveAsFile拿到正确的文件路径
  • 增加空邮件判断:避免目标文件夹无邮件时出现索引越界错误
  • 新增COM对象释放:防止PowerShell进程残留Outlook实例

内容的提问来源于stack exchange,提问作者Danny Moulier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:20:59