我正在尝试从报告服务下载文件。我第一次运行此代码它工作正常,但下次它不会覆盖第一个下载的文件。我在创建WebClient对象之前尝试添加 Remove-Item $ file ,但是当我这样做时,我收到错误进程无法访问文件'D:\ Work \ RawMaterialCodes.xls '因为它正被另一个进程使用。,这个过程就是Powershell本身。我试过调用 $ webClient.Dispose()认为这可能会释放文件,但没有运气。 有没有人有任何想法如何在下次下载尝试之前覆盖下载的文件和/或将其删除?
$reportServer = "http://localhost/ReportServer_TRITON"
$reportName = "RawMaterialCodes"
$file = "D:\Work\RawMaterialCodes.xls"
$startDate = "2014-01-22"
$endDate = "2014-01-24"
$category = "Cat1"
$destination = ""
$reportUrl = $reportServer + "?/" + $reportName + "&StartDate=" + $startDate + "&EndDate=" + $endDate + "&Category=" + $category + "&Destination=" + $destination + "&rs:Format=Excel"
$webClient = new-object System.Net.WebClient
$webClient.Credentials = New-Object System.Net.NetworkCredential($userName, $password, $domain)
$webClient.DownloadFile($reportUrl, $file)
$mailMessage = new-object System.Net.Mail.MailMessage
$mailMessage.From = $emailFrom
$mailMessage.To.Add($emailTo)
$mailMessage.Subject = $emailSubject
$mailMessage.Body = $emailBody
$attachment = new-object System.Net.Mail.Attachment($file, 'text/plain')
$mailMessage.Attachments.Add($attachment)
$smtpClient = New-Object System.Net.Mail.SmtpClient($smtpServer, 25)
$smtpClient.EnableSsl = $enableSsl
if ($smtpAuthUsername -ne "")
{
$smtpClient.Credentials = New-Object System.Net.NetworkCredential($smtpAuthUsername, $smtpAuthPassword)
}
$smtpClient.Send($mailMessage)
答案 0 :(得分:0)
我写的代码没有看到任何问题。这里没有必要处理WebClient
以释放文件,因为它没有保留文件。导致此错误的最可能原因是您的代码或其他程序的另一部分打开文件而未正确处理它。
我首先会假设这是我的错误代码并仔细审核我操纵这个文件的任何其他地方,看看我是否意外地把它打开了一个句柄
答案 1 :(得分:0)
$mailMessage
保持对您文件的开放处理。添加
$mailMessage.Dispose()
在脚本的末尾,您应该能够覆盖。