【问题标题】:Email & Move Files Recursively递归发送电子邮件和移动文件
【发布时间】:2011-09-29 23:58:29
【问题描述】:

我希望创建一个脚本,该脚本可以递归地通过电子邮件发送和移动指定文件夹中的所有文件的文件。

因此对于每个文件,它将: 电子邮件文件1 移动文件1 电子邮件文件2 移动文件2 等等。

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

$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'}

如果有人可以帮助我,将不胜感激。

【问题讨论】:

    标签: powershell


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      在 msg 对象上调用 .Dispose()

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

      (我认为您只需要在 msg 对象上调用 .Dispose(),但我不记得了……我测试该代码已经有一段时间了)。

      【讨论】:

        猜你喜欢
        • 2013-03-26
        • 1970-01-01
        • 1970-01-01
        • 2011-10-22
        • 2013-08-22
        • 1970-01-01
        • 2018-07-24
        • 2015-05-03
        相关资源
        最近更新 更多