WebClient.UploadFile可以在PowerShell ISE中工作,但不能在PowerShell控制台窗口



我需要将文件上传到web服务器(实际上是Jira服务器(。当脚本在PowerShell ISE:中运行时,以下代码可以完美工作

$WebClient = new-object System.Net.WebClient
$WebClient.Headers.Add("Authorization", "Basic " + $AuthStr)
$WebClient.Headers.Add("X-Atlassian-Token", "nocheck")
$WebClient.UploadFile($BasePath + "/attachments", $AttachmentFile) >$null

但是,具有相同数据的相同代码在通常的PowerShell控制台窗口中执行时会引发错误:

Exception calling "UploadFile" with "2" argument(s): "An exception occurred during a WebClient request."
At C:TempQualysProcessWeeklyReport.ps1:69 char:5
+     $WebClient.UploadFile($BasePath + "/attachments", $AttachmentFile ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : WebException

我无法获得更详细的错误消息。尚未创建PowerShell配置文件,PowerShell环境处于默认状态。

用[system.uri]类型变量替换普通字符串不会改变这种情况。

这是本地问题,而不是web服务器返回的错误。如果抛出错误,数据包嗅探器不会显示与服务器的任何通信。

有人能建议在哪里挖掘吗?

找到它。$AttachmentFile字符串变量包含文件名。但是,这只是文件的名称,没有任何路径。此文件位于脚本文件夹中。由于某些原因,如果在独立控制台中执行UploadFile方法,则无法找到此文件。应指定文件的完整路径(包括文件夹路径(以使其正常工作。

上述代码应进行修改,以便在ISE和控制台中工作:

$WebClient = new-object System.Net.WebClient
$WebClient.Headers.Add("Authorization", "Basic " + $AuthStr)
$WebClient.Headers.Add("X-Atlassian-Token", "nocheck")
$WebClient.UploadFile($BasePath + "/attachments", (Get-Location).Path + "" + $AttachmentFile)

顺便说一句,如果分析try-catch块中的$error[0]内容,可以看到此错误(找不到文件(。系统尝试查找此文件的位置是用户配置文件(c:\users\username(的根目录。如果从命令行显示$Error[0],则不存在此信息。

相关内容

  • 没有找到相关文章

最新更新