电子邮件&递归移动文件

时间:2009-06-08 11:37:42

标签: powershell

我希望创建一个脚本,以递归方式为指定文件夹中的所有文件发送电子邮件和移动文件。

因此,对于每个文件,它将: 电邮File1 移动File1 电邮File2 移动File2 等

现在,当我运行下面的脚本时,我收到以下消息: 该进程无法访问该文件,因为它正由另一个进程使用。

$files = Get-ChildItem 'c:\Test\Out\'

ForEach ($file in $files) 
    {$smtpServer = “mail.dlabs.local”

    $msg = New-Object Net.Mail.MailMessage
    $att = New-Object Net.Mail.Attachment($file.FullName)
    $smtp = New-Object Net.Mail.SmtpClient($smtpServer)

    $msg.From = “test@dlabs.co.uk”
    $msg.To.Add(”test@dlabs.co.uk”)
    $msg.Subject =  ("Test Message "+ $file.Name)
    $msg.Body = “”
    $msg.Attachments.Add($att)

    $smtp.Send($msg)

    Move-Item $moveFile.FullName 'c:\Test\Sent'}

如果有人能帮助我,我将非常感激。

2 个答案:

答案 0 :(得分:3)

那是因为已经为您要移动的文件打开了文件句柄。

Net.Mail.Attachment实现IDisposable,所以要释放文件锁,你应该调用$ att.Dispose()

答案 1 :(得分:1)

在msg对象上调用.Dispose()

如果这不起作用,您可能还需要首先在Attachment对象上调用.Disposse,然后在msg对象上调用.Dispose()

(我想你只需要在msg对象上调用.Dispose(),但我记不清了......因为我测试了那段代码已经有一段时间了。)