Copy files between SharePoint Online Sites using PowerShell

Featured image

In this blog, we shall check how to copy the document files between the SharePoint Online sites using PowerShell. This script requires SharePoint Online PnP module, install it from here.

``` {.black .top-margin .bottom-margin} Param( [Parameter(ParameterSetName = “Inputparameter”,Position=1,Mandatory=$True)] [String]$sharepointUrl, [Parameter(ParameterSetName = “Inputparameter”,Position=2,Mandatory=$True)] [String]$targeturl, [Parameter(ParameterSetName = “Inputparameter”,Position=3,Mandatory=$True)] [String]$Sourceurl, [Parameter(ParameterSetName = “Inputparameter”,Position=4,Mandatory=$True)] [String]$SourceDocumentLib ) function Copy-sharepoint { Param( [Parameter(Mandatory=$True)] [String]$sharepointUrl, [Parameter(Mandatory=$True)] [String]$targeturl, [Parameter(Mandatory=$True)] [String]$Sourceurl, [Parameter(Mandatory=$True)] [String]$SourceDocumentLib, [Parameter(Mandatory=$True)] [String]$UserName, [Parameter(Mandatory=$True)] [String]$Password, [Parameter(Mandatory=$True)] [System.Management.Automation.PSCredential]$cred ) #create secure password $sPassword = $Password | ConvertTo-SecureString -AsPlainText -Force $loadInfo1 = [System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint.Client”) $loadInfo2 = [System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint.Client.Runtime”) Connect-PnPOnline -Url $Sourceurl -Credentials $cred $Files= Find-PnPFile -List $SourceDocumentLib -Match * Disconnect-PnPOnline $Loginsource =$false $webClient = New-Object System.Net.WebClient $webClient.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $sPassword) $webClient.Headers.Add(“X-FORMS_BASED_AUTH_ACCEPTED”, “f”) $webclient.Proxy = $null foreach($file in $Files) { $pageUrl = $sharepointUrl+$file.ServerRelativeUrl $UniqueFileName = $file.Name $ByteArray=$webClient.DownloadData($pageUrl) $tfolderWithname= ($pageUrl -split $Sourceurl)[1] $tfolderwiths =($tfolderWithname -split $UniqueFileName)[0] $tfolderrmstr =$tfolderwiths.TrimStart(“/”) $tfolder =$tfolderrmstr.TrimEnd(“/”) $fstream = System.IO.MemoryStream If($tfolder -notlike “*Forms”) { If($Loginsource -eq $false ) { Connect-PnPOnline -Url $targeturl -Credentials $cred $Loginsource =$true Add-PnPFile -FileName $UniqueFileName -Folder $tfolder -Stream $fstream } else { Add-PnPFile -FileName $UniqueFileName -Folder $tfolder -Stream $fstream } } } } $cred=Get-Credential $UName=$cred.UserName.ToString() $Pass =$cred.GetNetworkCredential().Password Copy-sharepoint -UserName $UName -Password $Pass -cred $cred -sharepointUrl $sharepointUrl -targeturl $targeturl -Sourceurl $Sourceurl -SourceDocumentLib $SourceDocumentLib

```