Forum Discussion

farhan faiz's avatar
farhan faiz
Copper Contributor
Jan 30, 2017

SharePoint Online - Upload document using PowerShell / CSOM

I am trying to upload document to SharePoint Online using PowerShell / CSOM.
Issue is that I don't have file on local drive. I have URL of a file which I download as
$wc = New-Object System.Net.WebClient
$ByteArray = $wc.downloaddata(Document URL)

 

$ByteArray is a Byte array

 

 

When I try to user following code, it generates error

 

#Specify tenant admin and site URL and including DLL

$User = "XXXXX@XXXXXXX"
$SiteURL = "XXXXXXXXXXX"
$DocLibName = "Documents"
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 = 'XXXXXX' | ConvertTo-SecureString -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.ExecuteQuery()

 

#Upload File

$Upload = $List.RootFolder.Files.Add('abc.pdf',$ByteArray,$true)
$Context.Load($Upload)
$Context.ExecuteQuery()

 

Add doesn't work and not sure how to upload a byte array. I have tried with different arguments.

 

Error is

 

Cannot find an overload for "Add" and the argument count: "3".

 

Any help?

  • Please check the below modified script, which generates the byte array from the given URL and upload it to the SPO.

     

     

    $wc = New-Object System.Net.WebClient
    # update with correct path 
    $ByteArray = $wc.downloaddata("http://downloads.microsoft.com/download/file.exe")
    
    #Specify tenant admin and site URL and including DLL
    $User = "XXXXX@XXXXXXX"
    $Password = 'XXXXXX' | ConvertTo-SecureString -AsPlainText -Force
    $SiteURL = "XXXXXXXXXXX"
    $DocLibName = "Documents"
    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"
    
    
    #Bind to site collection
    $Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Creds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($User,$Password)
    $Context.Credentials = $Creds
    
    $List = $Context.Web.Lists.GetByTitle($DocLibName)
    $Context.Load($List)
    $Context.ExecuteQuery()
    
    #Upload File
    $s =[System.IO.MemoryStream]($ByteArray)
    $FileCreationInfo = New-Object Microsoft.SharePoint.Client.FileCreationInformation
    $FileCreationInfo.Overwrite = $true
    $FileCreationInfo.ContentStream = $s
    $FileCreationInfo.URL = $UniqueFileName
    $Upload = $List.RootFolder.Files.Add($FileCreationInfo)
    $Context.Load($Upload)
    $Context.ExecuteQuery() 

     

Resources