PowerShell Закрыть файл / удалить файл после отправки по электронной почте через .NET

Я застрял в конце сценария, над которым я работаю, где файл отправляется по электронной почте перед тем, как быть удалено. За исключением того, что файл, кажется, все еще открыт, вероятно, клиентом SMTP, поэтому я получаю сообщение об ошибке, когда пытаюсь удалить его. Конечно, перезапуск оболочки позволит мне удалить ее, не в этом суть. ;-) Дело в том, что я бы хотел создать его, отправить по электронной почте, удалить в одном скрипте.

Ошибка:

   Cannot remove item C:\Temp\myfile.csv: The process cannot access the file
    'C:\Temp\myfile.csv' because it is being used by another process.

Код:

$emailFrom = 'noreply@localhost'
$emailTo = 'aaron@localhost'
$smtpServer = 'localhost'

$FileName='myfile.csv'
$FilePathName='c:temp\' + $FileName

$subject = 'Emailing: ' + $FileName
$body = 'This message as been sent with the following file or link attachments: ' + $FileName

$msg = new-object Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment($FilePathName)
$smtp = new-object Net.Mail.SmtpClient($smtpServer)

$msg.From = $emailFrom
$msg.To.Add($emailTo)
$msg.Subject = $subject
$msg.Body = $body
$msg.Attachments.Add($att)
$smtp.Send($msg)

#Garbage Collection (used for releasing file for deleting)
# Start-Sleep -s 1
# [GC]::Collect()

#Clean-up/Remove File
# Start-Sleep -s 1
if (Test-Path $FilePathName) {Remove-Item $FilePathName}

Закомментированные строки - это мои попытки вставки пауз и очистки мусора , что дало тот же результат.

5
задан Aaron Wurthmann 30 November 2010 в 23:02
поделиться