电子邮件附件未正确保存

时间:2018-08-14 20:38:16

标签: powershell csv outlook rename

每天早晨,我都会自动生成一封电子邮件,该电子邮件带有CSV附件。这是我到目前为止的内容:

$outlook = New-Object -ComObject Outlook.Application
$namespace = $outlook.GetNamespace("MAPI")
# Below: 6 is the default for inbox, so this saves the user from having to
# select the inbox folder. Change if emails w/ attatchements are going to a
# different folder
$folder = $namespace.GetDefaultFolder(6)
$filepath = "I:\PowerShell"
$folder.Items | foreach {
    $_.attachments | foreach {
        $filename = $_.filename
        if ($filename.Contains("example.csv")) {
            $_.SaveAsFile((Join-Path $filepath $filename))
            Rename-Item -LiteralPath '.\example.csv' -NewName "Server.csv" -Force
        }                     
    }
}

当我第一次运行它时,它成功地从电子邮件中获取了附件,将附件保存到指定的文件夹,并将其重命名为“ Server.csv”。但是,当我第二次运行它时,它将抓取附件并将​​其保存,但是不会将其重命名/覆盖为“ Server.csv”,因此只会将其保存为example.csv。有时会抛出错误提示

  

重命名项:该文件已存在时无法创建文件

但是,我在那里-Force,所以我不确定为什么会这样。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

-Force允许您重命名隐藏文件或只读文件。它不允许您重命名文件以替换现有文件。检查目标文件是否已经存在,如果存在,请删除它。然后直接用所需的文件名保存附件。

$outfile = Join-Path $filepath 'Server.csv'
if (Test-Path -LiteralPath $outfile) {
    Remove-Item $outfile -Force
}
$_.SaveAsFile($outfile)