2015-10-07 125 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") 

在第二個例子中,引號是你應該使用的。