How to Upload Files With FTP in PowerShell
-
Use the
System.Net.WebClient
Object to Upload Files With FTP in PowerShell -
Use the
FtpWebRequest
Object to Upload Files With FTP in PowerShell - Upload Multiple Files With FTP in PowerShell

FTP (File Transfer Protocol) is a standard network protocol used to transfer files between a client and server on a computer network. An FTP server is a common solution to facilitate file transfers across the internet.
We can upload files to an FTP server and download files from an FTP server. PowerShell is a scripting tool that can automate FTP upload and download tasks.
This tutorial will teach you to upload files to an FTP server using PowerShell.
Use the System.Net.WebClient
Object to Upload Files With FTP in PowerShell
We can use the System.Net.WebClient
object to upload files to an FTP server. It sends or receives data from any local, intranet, or Internet resource identified by a URI.
First, we need to create an instance of a System.Net.WebClient
object and assign it to a variable $WebClient
. The New-Object
cmdlet creates a .NET Framework or COM object instance.
$WebClient = New-Object System.Net.WebClient
Now, let’s specify a file and FTP URI. Use a valid user name and password for the server. So, replace the value in $FTP
with your FTP details.
$File = "C:\New\car.png"
$FTP = "ftp://ftp_user:ftp_password@ftp_host/car.png"
Then create a FtpWebRequest
object and configure it as shown below. The Credentials
property is used to specify the credentials for connecting to an FTP server.
The UseBinary
property sets a Boolean value to specify the data type for file transfers. True
indicates that the data to be transferred is binary
, and false
indicates that the data to be transferred is text
.
This method uses a binary transfer mode to transfer files without modification or conversion. As a result, the same file on the source computer will be uploaded to the server.
$FTPRequest = [System.Net.FtpWebRequest]::Create("$remote_file")
$FTPRequest = [System.Net.FtpWebRequest]$FTPRequest
$FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$FTPRequest.Credentials = New-Object System.Net.NetworkCredential($username, $password)
$FTPRequest.UseBinary = $true
$FTPRequest.UsePassive = $true
# Read the file for upload
$FileContent = gc -en byte $local_file
$FTPRequest.ContentLength = $FileContent.Length
# Get stream request by bytes
$run = $FTPRequest.GetRequestStream()
$run.Write($FileContent, 0, $FileContent.Length)
# Cleanup
$run.Close()
$run.Dispose()
When using a FtpWebRequest
object to upload a file to a server, we must write the file content to the request stream obtained by calling the GetRequestStream
method.
We must write to the stream and close it before sending the request.
Upload Multiple Files With FTP in PowerShell
Sometimes, we might need to upload multiple files to an FTP server. Uploading files one by one will take a lot of time.
So, we have created this PowerShell script to upload multiple files to an FTP server in one go.
First, create a System.Net.WebClient
object and assign it to a $WebClient
variable.
$WebClient = New-Object System.Net.WebClient
Specify the directory where all files that you want to upload are present.
$Dir = "C:\New"
Then specify the URI of your FTP server.
$FTP = "ftp://ftp_user:ftp_password@ftp_host/docs/"