2014-04-10 102 views
1

我正在開發一個FTP自動化腳本,它將從網絡共享中將某些文件上傳到FTP服務器上的特定位置。我找到了下面的內容,但無法對其進行編輯以導航到所需的目標目錄。PowerShell FTP自動化問題

#ftp server 
$ftp = "ftp://SERVER/OtherUser/" 
$user = "MyUser" 
$pass = "MyPass" 

$webclient = New-Object System.Net.WebClient 
$webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass) 

#list every sql server trace file 
foreach($item in (dir $Dir "*.trc")){ 
    "Uploading $item..." 
    $uri = New-Object System.Uri($ftp+$item.Name) 
    $webclient.UploadFile($uri, $item.FullName) 
} 

我有憑據的FTP服務器,但我默認爲/home/MyUser/,我需要直接到/home/OtherUser/。我有權瀏覽並上傳到該目錄,但我無法弄清楚如何從本質上來說,cd到那個位置。

這是收到的電流誤差:

Exception calling "UploadFile" with "2" argument(s): "The remote server returned an erro 
r: (550) File unavailable (e.g., file not found, no access)." 
At line:26 char:26 
+  $webclient.UploadFile <<<< ($uri, $item.FullName) 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : DotNetMethodException 
+0

這將有助於http://stackoverflow.com/questions/22773071/i-download-new-files-from-ftp-site-with-powershell/22782386#22782386 – Raf

+0

不幸的是,這個腳本將被使用由幾個業務部門,所以我們需要能夠簡單地給他們的文件。我覺得爲他們添加一個圖書館會給支持帶來很大的負擔。 – Wes

+1

您好,我已經爲您的問題制定了答案,我認爲您會發現有幫助。請看下面。 –

回答

2

您需要使用FtpWebRequest類型。 WebClient用於HTTP流量。

我已經編寫並測試了一個參數化函數,它將文件上傳到FTP服務器,名爲Send-FtpFile。我使用sample C# code from MSDN將其轉換爲PowerShell代碼,並且工作得很好。

function Send-FtpFile { 
    [CmdletBinding()] 
    param (
      [ValidateScript({ Test-Path -Path $_; })] 
      [string] $Path 
     , [string] $Destination 
     , [string] $Username 
     , [string] $Password 
    ) 
    $Credential = New-Object -TypeName System.Net.NetworkCredential -ArgumentList $Username,$Password; 

    # Create the FTP request and upload the file 
    $FtpRequest = [System.Net.FtpWebRequest][System.Net.WebRequest]::Create($Destination); 
    $FtpRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile; 
    $FtpRequest.Credentials = $Credential; 

    # Get the request stream, and write the file bytes to the stream 
    $RequestStream = $FtpRequest.GetRequestStream(); 
    Get-Content -Path $Path -Encoding Byte | % { $RequestStream.WriteByte($_); }; 
    $RequestStream.Close(); 

    # Get the FTP response 
    [System.Net.FtpWebResponse]$FtpRequest.GetResponse(); 
} 

Send-FtpFile -Path 'C:\Users\Trevor\Downloads\asdf.jpg' ` 
    -Destination 'ftp://google.com/folder/asdf.jpg' ` 
    -Username MyUsername -Password MyPassword; 
+1

謝謝Trevor。當我得到改變(大約一個小時)後,我會試試這個。 – Wes

+0

@Wescrock:不客氣 - 讓我知道它是如何運作的。 –