我需要将文件上传到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],则不存在此信息。