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

使用PowerShell保存Outlook邮件附件时遇空值错误求助

问题解决:PowerShell保存Outlook附件报错“无法对空值表达式调用方法”

你的代码存在两个核心问题,导致了报错:

1. 数组索引错误

PowerShell中数组是从0开始索引的,你当前只有1封邮件和1个附件,$emails[1]和$Attachments[1]实际指向的是不存在的元素。虽然你说Write-Host $fileName能返回文件名,可能是之前代码中$emails的赋值逻辑有特殊处理,但规范写法应该用索引0。

2. 自动变量$_误用

$_是PowerShell的管道自动变量,仅在管道上下文(比如ForEach-Object、Where-Object等)中才有值。你直接在脚本中调用$_.saveasfile(),此时$_为null,必然触发“无法对空值表达式调用方法”的错误。

修正后的代码(两种可选方式)

方式1:直接指定单个附件保存(适合仅1封邮件1个附件的场景)

# 获取目标邮件和附件(索引从0开始)
$targetEmail = $emails[0]
$targetAttachment = $targetEmail.Attachments[0]

$fileName = $targetAttachment.FileName
$filePath = "C:\Users\myid\Documents"

# 直接调用附件对象的SaveAsFile方法
$targetAttachment.SaveAsFile((Join-Path $filePath $fileName))

方式2:循环遍历处理(适合多邮件/多附件的通用场景)

$savePath = "C:\Users\myid\Documents"

# 遍历每一封邮件
foreach ($email in $emails) {
    # 遍历当前邮件的所有附件
    foreach ($attachment in $email.Attachments) {
        # 可选:仅保存指定文件名的附件
        if ($attachment.FileName -eq "TEST.CSV") {
            $attachment.SaveAsFile((Join-Path $savePath $attachment.FileName))
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:45:09