我正在尝试从报告服务下载一个文件。当我第一次运行这段代码时,它工作得很好,但是下一次它不会覆盖下载的第一个文件。在创建对象之前,我已经尝试过添加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)发布于 2014-02-27 12:11:28
$mailMessage正在为您的文件保留一个打开句柄。添加
$mailMessage.Dispose()在脚本的末尾,您应该能够覆盖。
发布于 2014-02-26 21:08:38
我看不出你写的代码有什么问题。在这里,对于释放文件来说,没有必要配置WebClient,因为它没有保留一个句柄。造成此错误的最可能原因是您的另一段代码或另一个程序,它正在打开文件而没有正确地处理它。
我首先假设是我的代码出错了,然后仔细检查我操作这个文件的任何其他地方,看看是否意外地打开了它的一个句柄。
https://stackoverflow.com/questions/22053146
复制相似问题