Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
PowerShell – FTP Upload Directory With Sub-Directories
# FTP Server Variables
$FTPHost = ''
$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
$makeDirectory = [System.Net.WebRequest]::Create($DesFolder);
$makeDirectory.Credentials = New-Object System.Net.NetworkCredential($FTPUser,$FTPPass);
$makeDirectory.Method = [System.Net.WebRequestMethods+FTP]::MakeDirectory;
#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
Copy link

Yelleko commented Mar 20, 2017

I love this script. Was curious if there was an easy way to log the output of the files uploaded?

Copy link

nutt318 commented Mar 20, 2017

is it possible to create a new directory once connected and then put everything in that new folder? Not the greatest with powershell and trying to figure it out but no luck yet.

Copy link

You Sir, saved me a shitload of time ! Thanks for this script !

Copy link

francesco1119 commented May 27, 2018

Is there a way to keep PowerShell script running all day long so it can upload the any other files that is added to the directory?

Copy link

Great script! Thanks for sharing David

Copy link

I desperately looking for this man. Anyways Thnx man.

Copy link

Thanks a lot <3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment