2015-10-07 128 views
1

我正在尝试使用FTP将文件上传到FTP服务器。我在网上找到了以下脚本,但是我无法使其工作。将文件上传到FTP服务器时出错

$UserName = 'username' 

$Password = 'password' 

$LocalFilePath = 'c:\FolderName\x.txt' 

$RemoteFileName = 'x.txt' 

$ServerName = 'my.ftpserver.co.uk' 


$webclient = New-Object System.Net.WebClient 

$webclient.Credentials = New-Object System.Net.NetworkCredential($UserName, $Password) 

#Connect to FTP 
$uri = New-Object System.Uri(“ftp://$ServerName/$RemoteFileName”) 
write-host $uri 

#upload as file 
$webclient.UploadFile($uri, $LocalFilePath) 

但是当我运行此我得到以下错误:

Exception calling "UploadFile" with "2" argument(s): "An exception occurred during a WebClient request." 
    At line:21 char:22 
+ $webclient.UploadFile <<<< ($uri, $LocalFilePath) 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : DotNetMethodException 

任何人都可以点我在正确的方向? 我可以连接使用Filezilla等从我的电脑,所以它不被防火墙或任何东西,

+0

测试你的脚本,它运行良好......你使用代理或类似的东西? – Avshalom

+0

不是我所知道的,我尝试过使用各种FTP客户端(Filezilla,WinSCP等)的连接,并且它工作正常。我认为Powershell只是实现了与他们一样的FTP连接,所以如果他们工作,powershell也应该(或者我错了吗?) – IGGt

+0

启用[.NET网络日志记录](http://stackoverflow.com/q/9664650/850848)并向我们显示日志。向我们显示来自FTP客户端的日志(例如WinSCP)以供比较。 –

回答

0

测试你的脚本,它运行良好,只有我能够重现你的错误的方式是如果我指向$ LocalFilePath一个不存在的文件。您可以尝试:

Test-Path($LocalFilePath) 

然后看看它是否返回True?

+0

返回TRUE。我发现通过将New-Object System.Uri(“ftp:// $ ServerName/$ RemoteFileName”)更改为New-Object System.Uri($ ftp + $ File_Name) – IGGt

0

从你的评论和代码我看到在问题中的问题可能只是因为你有聪明的报价在那里。这将是您的编码编辑器的产品,或者将该代码复制并粘贴到您的环境中的源代码。你需要注意这些事情。假设路径正确形成,也许这只是你的问题。

智能引号

$uri = New-Object System.Uri(“ftp://$ServerName/$RemoteFileName”) 

正确的双引号

$uri = New-Object System.Uri("ftp://$ServerName/$RemoteFileName") 

在第二个例子中,引号是你应该使用的。