UPDATE: The script now supports uploading files larger than 2MB.
Another PowerShell sample script for you. This one uploads all files within a specified local directory to a Document Library within a Site in an O365 tenant.
All you need to run this script is an O365 tenant, the SharePoint client components SDK installed on the machine running the script - http://www.microsoft.com/en-us/download/details.aspx?id=35585 and to update the $User, $SiteURL, $DocLibName (name of the destination Document library) and $Folder (path to the local folder containing the files to upload) variables. When the script is executed it will prompt for the password of the user specific in the $User variable.
One thing to point out is that CSOM has a maximum upload size of 2MB.
#Specify tenant admin and site URL$User = "admin@tenant.onmicrosoft.com"$SiteURL = "https://tenant.sharepoint.com/sites/site"$Folder = "C:\FilesToUpload"$DocLibName = "DocLib"
#Add references to SharePoint client assemblies and authenticate to Office 365 site - required for CSOMAdd-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll"Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"$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
#Retrieve list$List = $Context.Web.Lists.GetByTitle($DocLibName)$Context.Load($List)$Context.ExecuteQuery()
#Upload fileForeach ($File in (dir $Folder)){$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$Upload = $List.RootFolder.Files.Add($FileCreationInfo)$Context.Load($Upload)$Context.ExecuteQuery()}
Brendan Griffin
I hope you would add some lines to the script to keep the changed date and the author of the files.