“DownloadFile”调用时出现异常,有“2”个参数:在WebClient请求期间发生异常。

31

我试图设置自动下载和安装文件的过程。每次运行脚本时,我都会遇到错误,尽管我已经从周日起尝试了七种不同的更改,但它仍然给我报错。

脚本如下:

  if (test-path $java_path)

   {
   Write-Output "Java already installed. Skipping script"
   exit 0
    }

  else 

    {
      $source = "http://our.server.com/java-installer.zip"
      $destination = "c:\CHPACS"
      $client = new-object System.Net.WebClient
      $client.DownloadFile($source, $destination)

      }

我得到的错误信息是

 Exception calling "DownloadFile" with "2" argument(s): "An exception occurred during a WebClient request."
 At C:\ps_script\testjava.ps1:41 char:31
 +           $client.DownloadFile <<<< ($source, $destination)
 + CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordException
 + FullyQualifiedErrorId : DotNetMethodException

我需要创建一个函数才能使这个工作正常吗?

谢谢。


11
在遇到错误后,你可以执行 $error[0].Exception.ToString() 并发布结果吗?这将提供更详细的信息。 - latkin
从错误信息来看,似乎变量没有传递到 $client.DownloadFile($source, $destination)。我尝试了你要求的操作,但没有获得任何额外的信息。 - user1846439
3个回答

49

如果你查看MSDN文档中DownloadFile方法的说明,你会注意到第二个参数是一个文件名,而不是一个目录。因此,如果你重新定义$destination为类似以下的内容:

$destination = "c:\CHPACS\java-installer.zip"

然后它应该能够正常工作。

其次,请检查您尝试下载的文件是否正在使用或执行。如果文件正在使用,则会引发此异常。


OIC就像任何下载一样,源和目标文件名不必相同。文件可以在目标处重命名。现在它可以正常工作了。 - user1846439
3
值得一提的是,需要提供到目标文件的完整路径。最初我试图使用相对路径时遇到了问题。 - rkyser
2
如果您无法写入目标文件,似乎也会发生这种情况。我的文件被另一个进程锁定,无法覆盖。 - olivervbk
2
在搜索相同错误时,我偶然发现了这个答案,但当目标是带有文件名的完整路径时,我仍然会遇到错误。 - Squashman
如果到目标的路径不存在,也会出现这种情况。因此,在上面的示例中,如果路径“c:\CHPACS”不存在,则会收到相同的错误。 - DocOc

21

正如David所说,您应该给出一个文件名 + 文件夹应该存在。


5
谢谢你的回复,"the folder should exist" 恰好符合我的情况! - Yan Sklyarenko

4
在我的情况下,我试图执行脚本的机器无法访问URL。必须启用代理规则来将其限制在机器范围内以下载文件。

这是常见的一个。 - 0xFK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接