This script below will connect to a FTP server and upload the folder with sub-directories and content to the defined path.
Currently this script will assume it needs to create the directories.
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
GitHub: https://gist.github.com/dkittell/f029b6c7d1c46ebcffcb
Last Updated on February 12, 2016