2011-04-21 26 views
4

我創建遠程FTP目錄「米能夠把文件備份到遠程FTP與修改後的版本...使用PowerShell

  $File = "D:\Dev\somefilename.zip" 
      $ftp = "ftp://username:[email protected]/pub/incoming/somefilename.zip" 

      "ftp url: $ftp" 

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

      "Uploading $File..." 

      $webclient.UploadFile($uri, $File) 

我運行到這個問題,我」米試圖將一個文件上傳到一個不存在的目錄,這個放置失敗。所以我需要先創建目標目錄。 GET-MEMBER似乎沒有顯示任何我可以調用的方法來創建一個目錄,只有文件操作。

回答

6

我使用功能Create-FtpDirectory

function Create-FtpDirectory { 
    param(
    [Parameter(Mandatory=$true)] 
    [string] 
    $sourceuri, 
    [Parameter(Mandatory=$true)] 
    [string] 
    $username, 
    [Parameter(Mandatory=$true)] 
    [string] 
    $password 
) 
    if ($sourceUri -match '\\$|\\\w+$') { throw 'sourceuri should end with a file name' } 
    $ftprequest = [System.Net.FtpWebRequest]::Create($sourceuri); 
    $ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::MakeDirectory 
    $ftprequest.UseBinary = $true 

    $ftprequest.Credentials = New-Object System.Net.NetworkCredential($username,$password) 

    $response = $ftprequest.GetResponse(); 

    Write-Host Upload File Complete, status $response.StatusDescription 

    $response.Close(); 
} 

Ftp.psm1兩者在這裏你還可以找到其他功能FTP。

給其他人:抱歉沒有遵循着名的動詞 - 名詞模式。 ;)

+3

爲什麼你有這個調用'throw'爲正則表達式?當我們創建目錄時,爲什麼sourceuri需要成爲一個文件? – 2011-09-14 21:48:11

+0

@JohnBubriski這是您正在創建的目錄的「文件名」。它基本上意味着URI應該像'ftp://.../ directory'而不是'ftp://.../ directory /' – 2016-04-04 13:52:22