每天早晨,我都会自动生成一封电子邮件,该电子邮件带有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
,所以我不确定为什么会这样。
有什么建议吗?
答案 0 :(得分:2)
-Force
允许您重命名隐藏文件或只读文件。它不允许您重命名文件以替换现有文件。检查目标文件是否已经存在,如果存在,请删除它。然后直接用所需的文件名保存附件。
$outfile = Join-Path $filepath 'Server.csv'
if (Test-Path -LiteralPath $outfile) {
Remove-Item $outfile -Force
}
$_.SaveAsFile($outfile)