I need to copy folder with all it's content (files and folders) from Document Library to another Document library in another site.

The code: SPFolder.Copy(destinationUrl) works fine only when both source and destination docLibs are in the same site, but if the destination docLib is in another site I got the error: Value does not fall whithin the expected range.

Is there a simple way to do this?


  • Can you share your code to verify what is wrong you are doing
    – Sunil Sahu
    Sep 4 '18 at 12:47

SPFolder.Copy can't be use for cross site collection per my knowledge.

Here is sample script for cross site collection.

$ver = $host | select version
if($Ver.version.major -gt 1) {$Host.Runspace.ThreadOptions = "ReuseThread"}
if(!(Get-PSSnapin Microsoft.SharePoint.PowerShell -ea 0))
Write-Progress -Activity "Loading Modules" -Status "Loading Microsoft.SharePoint.PowerShell"
Add-PSSnapin Microsoft.SharePoint.PowerShell

#Set Static Variables

$SourceWebURL = "http://sp"
$SourceLibraryTitle = "Doc1"
$DestinationWebURL = "http://sp:12001"
$DestinationLibraryTitle = "Doc1"

#Begin Script

$sWeb = Get-SPWeb $SourceWebURL
#$sList = $sWeb.Lists | ? {$_.Title -eq $SourceLibraryTitle}
$dWeb = Get-SPWeb $DestinationWebURL
#$dList = $dWeb.Lists | ? {$_.title -like $DestinationLibraryTitle}

$Items = $sFolder.Files

foreach($Item in $Items)
    $sBytes = $Item.OpenBinary()
    $dFile = $dFolder.Files.Add($Item.Name, $sBytes, $true)

    $AllFields = $Item.Item.Fields | ? {!($_.sealed)}

    foreach($Field in $AllFields)
                $dFile.AddProperty($Field.Title, $Item.Properties[$Field.Title])
                $dFile.Properties[$Field.Title] = $Item.Properties[$Field.Title]
Write-Host "Script Done"
  • Great ! I converted the code to c# and it works perfect ! thanks a lot
    – Tal
    Sep 6 '18 at 7:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.