Powershell WebClient.DownloadFile不覆盖

问题描述:

我试图从报告服务下载文件。我第一次运行这个代码时,它工作正常,但下次它不会覆盖第一个下载的文件。我曾尝试在创建WebClient对象之前添加删除项目$文件,但是当我这样做时,出现错误该进程无法访问文件'D:\ Work \ RawMaterialCodes.xls',因为它正在被另一个过程。,这个过程是Powershell本身。我曾尝试致电$ webClient.Dispose()认为这可能会释放该文件,但没有运气。 有没有人有任何想法如何覆盖下载的文件和/或在下次尝试之前将其删除?Powershell WebClient.DownloadFile不覆盖

$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) 

$mailMessage是保持打开的句柄到您的文件。添加

$mailMessage.Dispose() 

在脚本的末尾,您应该可以覆盖。

我没有看到任何错误的代码,因为你写它。在释放文件方面,丢弃WebClient是不必要的,因为它不保留句柄。导致此错误的最可能原因是另一段代码或另一个正在打开该文件但未正确处理该文件的程序。

我先假设它是我的过错代码,并仔细审核其他任何地方,我操纵这个文件,看看是否我不小心留下它的句柄开放

+0

我已经更新了这个问题,以显示完整的脚本 – energ1ser

+0

@ Energ1ser似乎最有可能被另一个进程持有。你关闭了所有可能引用这个文件的应用吗? – JaredPar