<# $UserName ="XXXX" $Password ="XXXX" $SiteUrl = "https://XXXXXX.sharepoint.com" $SiteName ="teams/XXXXX" $FolderPath ="D:\Public\test\test\300" $SPFolder ="Shared Documents/FolderName/FolderName1" #Function to import Folders and files to sharepoint folder Function UploadFolderContents([string]$FolderImportPath,[Microsoft.SharePoint.Client.Folder]$SPFolder,[string]$FolderURL) { Write-Host "Input -> FolderImportPath is: $FolderImportPath" Write-Host "Input -> FolderURL is:" $FolderURL # Iterate the Folder files and upload to sharePoint Foreach($File in (dir $FolderImportPath -File)) { $Url_File = $SiteUrl + $FolderURL +"/"+ $File.Name Write-Host "Adding File : $Url_File" $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 = $Url_File $Files = $SPFolder.Files.Add($FileCreationInfo) $Context.Load($Files) $Context.ExecuteQuery() } # Iterate the Folders and upload the folder Foreach($Directory in (dir $FolderImportPath -Directory)) { $DirName = $Directory.Name #$DirName = $Directory.Name -replace '%','%25' $FolderCURL = $FolderURL +"/"+ $DirName Write-Host "Adding Folder : $FolderCURL" #sharepoint online powershell create folder $Folder = $SPFolder.Folders.Add($DirName) $Context.Load($Folder) $SPFolder.Context.ExecuteQuery() $Folder_URL = $FolderURL +"/"+ $Folder.Name $SubFolder = $FolderImportPath +"\"+ $Directory.Name #Function to import Folders and files to sharepoint folder by Recursively UploadFolderContents -FolderImportPath $SubFolder -SPFolder $Folder -FolderURL $Folder_URL } } # Add references to SharePoint client assemblies and authenticate to Office 365 site - required for CSOM $ClientDll= $PSScriptRoot +"\Microsoft.SharePoint.Client.dll" $RuntimeDll=$PSScriptRoot +"\Microsoft.SharePoint.Client.Runtime.dll" [Net.ServicePointManager]::SecurityProtocol = 'TLS11','TLS12','ssl3' Add-Type -Path $ClientDll Add-Type -Path $RuntimeDll #Setup Credentials to connect $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName,(ConvertTo-SecureString $Password -AsPlainText -Force)) Try { #Set up the context $Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl +"/"+ $SiteName) $Context.Credentials = $credentials $Context.RequestTimeout=10000*5000 $Url_Folder = "/"+ $SiteName +"/"+ $SPFolder Write-Host $Url_Folder #Get the List Root Folder $FolderImport=$Context.web.GetFolderByServerRelativeUrl($Url_Folder) UploadFolderContents -FolderImportPath $FolderPath -SPFolder $FolderImport -FolderURL $Url_Folder Write-host "Folder and Files Updated Successfully!" -ForegroundColor Green } catch { write-host "Error: $($_.Exception.Message)" -foregroundcolor Red }