如何在Powershell中使用FTP上传代理服务器?

时间:2012-04-11 00:52:09

标签: powershell proxy ftp

我试图在Powershell中使用FTP上传文件。我稍后使用FtpWebRequest后跟GetRequestStream,但此方法返回错误:

  

“使用HTTP代理时不支持请求的FTP命令。”

我确实支持代理,并且必须是。

如何在代理服务器后面通过Powershell上传?

这将仅使用.ps1 Powershell脚本运行。

我也尝试过:

$webclient = New-Object System.Net.WebClient
$uri = New-Object System.Uri($server)

$webclient.UploadFile($uri, "C:\Test\1234567.txt")

$server和该文件有效。但该代码返回此错误:

"An exception occurred during a WebClient request."
At C:\Test\script.ps1:101 char:26
+     $webclient.UploadFile <<<< ($uri, "C:\Test\1234567.txt")
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

我还尝试在文件路径中使用双反斜杠,但没有帮助。

我所处的代理仅触及HTTP,而不是FTP。

2 个答案:

答案 0 :(得分:4)

您确定您的代理支持FTP,还是只支持HTTP?见这个主题:

FTP File Upload with HTTP Proxy

对于WebClient我过去曾经使用过这个版本,虽然它是用于HTTP的,但你可以尝试一下:

$wc = New-Object System.Net.WebClient
$wc.Headers.Add("User-Agent","Mozilla/4.0+")        
$wc.Proxy = [System.Net.WebRequest]::DefaultWebProxy
$wc.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$wc.UploadFile($uri, "C:\Test\1234567.txt")

请注意 - “UploadFile方法将本地文件发送到资源。此方法使用STOR命令上载FTP资源。对于HTTP资源,使用POST方法。”

答案 1 :(得分:0)

我有一个例外:

  

使用“ 2”作为参数调用“ UploadFile”的异常:“在WebClient请求期间发生异常。”

跟踪显示,当我使用ftp-uri并将代理添加到webclient时,没有启动连接。 (既不发送给服务器也不发送给代理)

我支持身份验证的ftp-proxy,对我有用的唯一方法是:

$LocalFile = "C:\Temp\test.csv"
$FtpFile = "ftp://$ProxyUser:$ProxyPassword@$ProxyServer:21/ftp_test.csv"

$uri = New-Object System.Uri($FtpFile)
$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential("$FtpUser@$FtpServer","$FtpPassword")
$webclient.UploadFile($uri, $LocalFile)