Skip to content

Instantly share code, notes, and snippets.

@mmuchin
Forked from dkittell/FTP-UploadDirectory.ps1
Created May 7, 2019 20:41
Show Gist options
  • Select an option

  • Save mmuchin/f042ba0c6819cad3cd029dac0ffa3191 to your computer and use it in GitHub Desktop.

Select an option

Save mmuchin/f042ba0c6819cad3cd029dac0ffa3191 to your computer and use it in GitHub Desktop.

Revisions

  1. @dkittell dkittell created this gist Nov 24, 2015.
    64 changes: 64 additions & 0 deletions FTP-UploadDirectory.ps1
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,64 @@
    clear

    # FTP Server Variables
    $FTPHost = 'ftp://192.168.1.1/html/'
    $FTPUser = 'user'
    $FTPPass = 'password'

    #Directory where to find pictures to upload
    $UploadFolder = "C:\Temp\"

    $webclient = New-Object System.Net.WebClient
    $webclient.Credentials = New-Object System.Net.NetworkCredential($FTPUser,$FTPPass)

    $SrcEntries = Get-ChildItem $UploadFolder -Recurse
    $Srcfolders = $SrcEntries | Where-Object{$_.PSIsContainer}
    $SrcFiles = $SrcEntries | Where-Object{!$_.PSIsContainer}

    # Create FTP Directory/SubDirectory If Needed - Start
    foreach($folder in $Srcfolders)
    {
    $SrcFolderPath = $UploadFolder -replace "\\","\\" -replace "\:","\:"
    $DesFolder = $folder.Fullname -replace $SrcFolderPath,$FTPHost
    $DesFolder = $DesFolder -replace "\\", "/"
    # Write-Output $DesFolder

    try
    {
    $makeDirectory = [System.Net.WebRequest]::Create($DesFolder);
    $makeDirectory.Credentials = New-Object System.Net.NetworkCredential($FTPUser,$FTPPass);
    $makeDirectory.Method = [System.Net.WebRequestMethods+FTP]::MakeDirectory;
    $makeDirectory.GetResponse();
    #folder created successfully
    }
    catch [Net.WebException]
    {
    try {
    #if there was an error returned, check if folder already existed on server
    $checkDirectory = [System.Net.WebRequest]::Create($DesFolder);
    $checkDirectory.Credentials = New-Object System.Net.NetworkCredential($FTPUser,$FTPPass);
    $checkDirectory.Method = [System.Net.WebRequestMethods+FTP]::PrintWorkingDirectory;
    $response = $checkDirectory.GetResponse();
    #folder already exists!
    }
    catch [Net.WebException] {
    #if the folder didn't exist
    }
    }
    }
    # Create FTP Directory/SubDirectory If Needed - Stop

    # Upload Files - Start
    foreach($entry in $SrcFiles)
    {
    $SrcFullname = $entry.fullname
    $SrcName = $entry.Name
    $SrcFilePath = $UploadFolder -replace "\\","\\" -replace "\:","\:"
    $DesFile = $SrcFullname -replace $SrcFilePath,$FTPHost
    $DesFile = $DesFile -replace "\\", "/"
    # Write-Output $DesFile

    $uri = New-Object System.Uri($DesFile)
    $webclient.UploadFile($uri, $SrcFullname)
    }
    # Upload Files - Stop