Upload document using PowerShell Remotely in SharePoint Online

upload file to sharepoint online powershell

This SharePoint online tutorial explains, how to upload documents to document library using PowerShell Remotely in SharePoint Online Office 365.

In this article, I would like to speak about the process to upload the documents to SharePoint Online site from your local environment. However, the requirement still remains same as last time that user wants to migrate all the documents from his network / local drive to SharePoint online document library as part data migration. Since there are millions of files in user’s drive, I can’t ask the user to upload all his files one by one nor with the explorer view. Copying files manually will take quite a good time of time.

PowerShell Script to Upload Document to Document Library in SharePoint Online

The below PowerShell script uploads all the user documents to SharePoint Online document library. This script I can run request end user to execute on his local machine as and when he/she require. Another way is that I can run on behalf of the business user on my machine seamlessly.

The power shell script is as follows:

try {
#Specify tenant admin and site URL and user name
$User = “krishna@OnlySharePoint2013.onmicrosoft.com”
$SiteURL = https://onlysharepoint2013.sharepoint.com/sites/krishna
#Specify Local folder name where the files are to be uploaded
$Folder = “G:\KVN Articles\PS Testing\Files”
$DocLibName = “Finance”

$startedTime = Get-Date
Write-Host “Time Started = ” $startedTime

#Add references to SharePoint client assemblies and authenticate to Office 365 site – required for CSOM
Add-Type -Path “C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SharePoint.Client\v4.0_16.0.0.0__71e9bce111e9429c\Microsoft.SharePoint.Client.dll”
Add-Type -Path “C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SharePoint.Client.Runtime\v4.0_16.0.0.0__71e9bce111e9429c\Microsoft.SharePoint.Client.Runtime.dll”
#Reading Password from PowerShell Command line
$Password = Read-Host -Prompt “Please enter your password” -AsSecureString

#Bind to site collection
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Creds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($User,$Password)
$Context.Credentials = $Creds

#Creating Object to Document Library
$List = $Context.Web.Lists.GetByTitle($DocLibName)

#Reading through the local folder for files
Foreach ($File in (dir $Folder -File))
#Reading File data using IO stream object
$FileStream = New-Object IO.FileStream($File.FullName,[System.IO.FileMode]::Open)
$FileCreationInfo = New-Object Microsoft.SharePoint.Client.FileCreationInformation
$FileCreationInfo.Overwrite = $true
$FileCreationInfo.ContentStream = $FileStream
$FileCreationInfo.URL = $File
#Uploading file to document library
$Upload = $List.RootFolder.Files.Add($FileCreationInfo)
Write-Host “Uploaded File=” $File.Name
$completedTime = Get-Date
Write-Host “Time Completed = ” $completedTime
Write-Host “Script Excecuted Successfully !!!”
catch {
write-host “Error: $($_.Exception.Message)” -foregroundcolor red

I strongly believe that the script is self-explanatory as I have added comments for most of the lines.

To execute this script user must install the SharePoint client components SDK on his/her machine. SDK can be downloaded from – http://www.microsoft.com/en-us/download/details.aspx?id=35585

Steps to be followed to ensure the smooth execution:

1. Ensure that SharePoint Client components SDK installed on user machine
2. Microsoft.SharePoint.Client.dll and Microsoft.SharePoint.Client.Runtime.dll paths mentioned in the script are same as user’s machine
3. Open PowerShell command-let with Run as Administrator
4. Check the “execution policies” for PowerShell in user machine by executing below command in PowerShell command let
Get-ExecutionPolicy -List
5. The above command will get all the existing policies of the user mostly the output will be as follows:

Scope ExecutionPolicy
MachinePolicy Undefined
UserPolicy            Undefined
Process Undefined
CurrentUser Undefined
LocalMachine            Undefined

6. We need to change the execution policy from Undefined to RemotelySigned with the below command
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

7. Ensure that the policy got updated properly by executing the Get command as part of step-4

8. Now execute the PowerShell script as “.\<<ScriptFilename.ps1>> by navigating on the respective folder location of the script

9. Once the files are uploaded successfully, please revert the execution policies back to its original state by executing the below line
Set-ExecutionPolicy Undefined -Scope LocalMachine

Files uploaded to SharePoint Library:
In the output, you can see the uploaded user name.

upload file to sharepoint online powershell
upload file to sharepoint online powershell

You may like following SharePoint PowerShell Tutorials:

Hope this SharePoint Online tutorial helps to upload documents to document library using PowerShell in SharePoint Online Office 365.

Check out Best Alternative to InfoPath -> Try Now

EnjoySharePoint YouTube Channel

About Krishna Vandanapu

I am Krishna.Vandanapu a SharePoint architect working in IT from last 13+ years, I worked in SharePoint 2007, 2010, 2013, 2016 and Office 365. I have extensive hands on experience in customizing SharePoint sites from end to end. Expertise in SharePoint migration tools like Sharegate, Doc Ave and Metalogix. Migrated SharePoint sites from SharePoint 2007 to 2010 and 2010 to 2013 several times seamlessly. Implementing CSOM with Microsoft best practices. Spent quality time in configuring SharePoint application services like User Profile, Search, Managed Meta data services etc. Now exploring SharePoint Framework and SharePoint 2019

View all posts by Krishna Vandanapu →