我希望创建一个脚本,以递归方式为指定文件夹中的所有文件发送电子邮件和移动文件。
因此,对于每个文件,它将: 电邮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'}
如果有人能帮助我,我将非常感激。
答案 0 :(得分:3)
那是因为已经为您要移动的文件打开了文件句柄。
Net.Mail.Attachment实现IDisposable,所以要释放文件锁,你应该调用$ att.Dispose()
答案 1 :(得分:1)
在msg对象上调用.Dispose()
。
如果这不起作用,您可能还需要首先在Attachment对象上调用.Disposse,然后在msg对象上调用.Dispose()
。
(我想你只需要在msg对象上调用.Dispose()
,但我记不清了......因为我测试了那段代码已经有一段时间了。)