使用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
相关产品推荐
相关产品推荐

