2017-06-01 152 views
-1

我一直在努力獲得一個腳本工作,可以FTP文件到遠程Windows服務器,並希望看看我能否得到一些幫助。我通過搜索StackOverflow上和谷歌multpile網頁,並已成功使far.Below是我PowerShell腳本FTP文件到遠程Windows服務器

邏輯如下代碼:

  1. 一個文件夾中選擇了一個模式最早的文件
  2. 連接到FTP服務器
  3. 將文件複製到遠程服務器
  4. 從文件夾將文件移動到存檔文件夾

代碼似乎是失敗的,我嘗試將文件FTP服務器 - $ webclient.UploadFile($ URI,$ latestfile)

獲取此異常:

異常調用一個 「UploadFile」 與「 2「參數:」在WebClient請求期間發生異常。「 在C:\下載\的powershell \ testmove3.ps1:22字符:26 + $ webclient.UploadFile < < < <($ URI,$ latestfile) + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId :DotNetMethodException

$source = "C:\downloads\" 
$destination = "C:\dest\" 
Get-ChildItem -Path C:\downloads | Where-Object { $_.name -like "TEST.CSV-PlainText*.txt" } 

$latestfile=gci -path $source | Where-Object { $_.name -like "TEST.CSV-PlainText*.txt"} | sort FirstWriteTime | select -last 1 

"Oldest File $latestfile" 


## Get ftp object 
$ftp_client = New-Object System.Net.WebClient 
$user="someuser" 
$pass="somepass" 
$ftp_address = "ftp://ftp.testserver.com" 


## Make uploads 
$uri = New-Object System.Uri($ftp+$item.Name) 
"Item is $latestfile" 
$webclient.UploadFile($uri,$latestfile) 
"File uploaded to remote servr" 

Move-Item $latestfile.FullName $destination 
"File $latestfile moved" 
+0

想知道爲什麼反對票嗎?在發佈問題之前,我真的嘗試了很多選擇。我認爲這個論壇是爲了互相幫助 - 它確定如果你不能幫助,但不要提供一個理由downvote。這令人沮喪。 – Prashanth

+0

我沒有downvote,但是這個代碼需要被調試才能確定它爲什麼拋出這個異常。你比其他任何人都更有能力做到這一點。例如,我們不知道'$ item.Name'來自哪裏,或者'$ uri'和'$ latestfile'在傳遞給'UploadFile'時包含理智值,或者你的診斷代碼(例如''Item是$ latestfile「')正在輸出。沒有這種信息就很難回答這個問題。順便說一句,在你的第二個管道中,你有'排序FirstWriteTime',這應該是'排序LastWriteTime'。 – BACON

+0

另外,用於構造'New-Object System.Uri($ ftp + $ item.Name)'參數的變量不會出現在您提供的代碼中的任何其他地方。在此之前,您可以設置一個名爲'$ ftp_address'的變量(名稱不同)。 – BACON

回答

0

好吧,是它過夜,高興地報告,我有一個解決方案 - yeeehaw!

我甚至添加了一個邏輯來捕獲異常併發送電子郵件通知。希望這可以幫助任何人使用Powershell解決FTP問題。最後,它會向調用程序返回成功或失敗代碼。

#PowerShell.exe -File "C:\temp\FTP.ps1" 

trap [Exception] { 
    $recipient = "[email protected]" 
     $sender = "[email protected]" 
     $server = "test.mailserver.com" 
     $subject = "FTP Test" 
     $body = "Exception Title: " + $_.Exception.GetType().FullName + "`r`n`r`n" + "Exception Details: " + $_.Exception.Message 
     $msg = new-object System.Net.Mail.MailMessage $sender, $recipient, $subject, $body 
     $client = new-object System.Net.Mail.SmtpClient $server 
     $client.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials 
     $client.Send($msg) 

     exit 1 
     } 



    $ftpuser = "testuser" 
    $ftppass = "testpass" 
    $ftpserver = "ftp://ftp.testserver.com/" 
    $file = "C:\temp\one.txt" 
    $filenewname = "one.txt" 
    $webclient = New-Object System.Net.WebClient 
    $ftp = $ftpserver+$filenewname 
    $uri = New-Object System.Uri($ftp) 

    #Error was happening because the method call was attempting to use the HttpProxy on the Server machine. 
    #If the proxy is not set to null explicitly in your code, then you will get error - "An exception occurred during a webclient request" 
    $webclient.Proxy = $NULL 

    $webclient.Credentials = New-Object System.Net.NetworkCredential($ftpuser,$ftppass) 
    "Uploading $filenewname in $ftpserver" 
    $webclient.UploadFile($uri,$file) 
    "Uploaded $filenewname in $ftpserver" 


return 0 
相關問題