2009-06-08 10 views
0

私は、指定されたフォルダ内のすべてのファイルを電子メールで送信し、ファイルを再帰的に移動するスクリプトを作成しようとしています。電子メールとファイルを再帰的に移動

ので、ファイルごとにそれがされます:私は、次のメッセージが表示されます下のス​​クリプトを実行するとき メールは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 = “[email protected]” 
    $msg.To.Add(”[email protected]”) 
    $msg.Subject = ("Test Message "+ $file.Name) 
    $msg.Body = “” 
    $msg.Attachments.Add($att) 

    $smtp.Send($msg) 

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

誰でも私にこれを助けることができたら、それは最も感謝します。ファイルハンドルは、すでにあなたが移動しようとしているファイルに対して開かれているためです

答えて

3

Net.Mail.Attachmentはそうあなたが$ att.Dispose()MSGオブジェクトの

1

コール.Dispose()を呼び出す必要がありますロックファイルを解放するために、IDisposableをを実装しています。

これでうまくいかない場合は、まずAttachmentオブジェクトの.Disposseを呼び出し、次にmsgオブジェクトの.Dispose()を呼び出すことができます。

(私はあなただけのmsgオブジェクトに.Dispose()を呼び出すために持っていると思うが、私は覚えていないことができます...しばらくして、私はそのコードをテストしたので)。

関連する問題