Forum Discussion
How to uploads files to OneDrive for Business using Powershell
you can try this modified script and this script support sub folder in document library
$User = "testuser@domainname.com" $SiteURL = "https://test-my.sharepoint.com/personal/testuser_domainame_com"; $Folder = "C:\Users\Desktop\New folder" #DocDocLibName is document libary name $DocLibName = "Documents" $foldername = "Attachments" #Add references to SharePoint client assemblies and authenticate to Office 365 site – required for CSOM Add-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 = ConvertTo-SecureString ‘test1234’ -AsPlainText -Force #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.Load($List.RootFolder) $Context.ExecuteQuery() $ServerRelativeUrlOfRootFolder = $List.RootFolder.ServerRelativeUrl $uploadFolderUrl= $ServerRelativeUrlOfRootFolder+"/"+$foldername #Upload file Foreach ($File in (dir $Folder -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 = $File if($foldername -eq $null) { $Upload = $List.RootFolder.Files.Add($FileCreationInfo) } Else { $targetFolder = $Context.Web.GetFolderByServerRelativeUrl($uploadFolderUrl) $Upload = $targetFolder.Files.Add($FileCreationInfo); } #$Upload = $List.RootFolder.Files.Add($FileCreationInfo) $Context.Load($Upload) $Context.ExecuteQuery()
And also I am getting below error if I am uploading files larger than 200 MB.
Exception calling "ExecuteQuery" with "0" argument(s): "The operation has timed out"
At C:\Users\uday-\Desktop\New Text Document (2).ps1:55 char:1
+ $Context.ExecuteQuery()
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : WebException
- Manidurai MohanamariappanDec 16, 2017Iron Contributor
Yes, this script only support upto 250 mb size for single file so if you want to upload more than 250mb file size of single file, you can refer the below link.
https://gist.github.com/asadrefai/ecfb32db81acaa80282d
- Uday Kiran ReddyDec 16, 2017Copper Contributor
UploadFileInSlice ($ctx, $libraryName, $fileName, $fileChunkSizeInMB)
What is the $ctx we need to pass?
- Manidurai MohanamariappanDec 16, 2017Iron Contributor
Yes you need to pass the $ctx, $ctx is Client context
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Creds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($User,$Password)
$ctx.Credentials = $Creds