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.
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]($ByteArray)
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








