0

I am using below Powershell script to copy contents from one document library to another, however I am getting this error:

Cannot find an SPWeb object with id or url :......

Script:

$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://servername/sites/sitename/subsitename"
$SourceLibraryTitle = "testing"
$DestinationWebURL = "http://servername/sites/sitename/archivesubsitename"
$DestinationLibraryTitle = "archive"

##
#Begin Script
##

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

$AllFolders = $sList.Folders
$RootFolder = $sList.RootFolder
$RootItems = $RootFolder.files

foreach($RootItem in $RootItems)
{
    $sBytes = $RootItem.OpenBinary()
    $dFile = $dList.RootFolder.Files.Add($RootItem.Name, $sBytes, $true)

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

    foreach($Field in $AllFields)
    {
        if($RootItem.Properties[$Field.Title])
        {
            if(!($dFile.Properties[$Field.title]))
            {
                $dFile.AddProperty($Field.Title, $RootItem.Properties[$Field.Title])
            }
            else
            {
                $dFile.Properties[$Field.Title] = $RootItem.Properties[$Field.Title]
            }
        }
    }
    $dFile.Update()
}

foreach($Folder in $AllFolders)
{
    Remove-Variable ParentFolderURL
    $i = 0

    $FolderURL = $Folder.url.Split("/")

    while($i -lt ($FolderURL.count-1))
    {
    $ParentFolderURL = "$ParentFolderURL/" + $FolderURL[$i]
    $i++
    }

    $CurrentFolder = $dList.Folders | ? {$_.url -eq $ParentFolderURL.substring(1)}
    if(!($CurrentFolder.Folders | ? {$_.name -eq $Folder.Name}))
    {
        $NewFolder = $dlist.Folders.Add(("$DestinationWebURL" + $ParentFolderURL), [Microsoft.SharePoint.SPFileSystemObjectType]::Folder, $Folder.name)
        $NewFolder.update()
    }
    else
    {
        $NewFolder = $dList.Folders | ? {$_.name -eq $Folder.Name}
    }
    $AllFiles = $sList.Items
    $sItems = $Folder.folder.Files

    if($Folder.Folder.Files.count -gt 0)
    {
        foreach($item in $sItems)
        {

            $Relative = ($Item.ServerRelativeUrl).substring(1)
            $TargetItem = $AllFiles | ? {$_.URL -eq $Relative}
            $sBytes = $TargetItem.File.OpenBinary()
            $dFile = $Newfolder.Folder.Files.Add($TargetItem.Name, $sBytes, $true)
            $AllFields = $TargetItem.Fields | ? {!($_.sealed)}

            foreach($Field in $AllFields)
            {
                if($TargetItem.Properties[$Field.Title])
                {
                    if(!($dFile.Properties[$Field.title]))
                    {
                        $dFile.AddProperty($Field.Title, $TargetItem.Properties[$Field.Title])
                    }
                    else
                    {
                        $dFile.Properties[$Field.Title] = $TargetItem.Properties[$Field.Title]
                    }
                }
            }
            $dFile.Update()
        }
    }
}
3

1 Answer 1

0

Ideally, if the Url of the sub site is correct. The PS command $sWeb = Get-SPWeb $SourceWebURL should work. Since it isn't working for you, there is another way you can try it:

    $siteCollectionUrl = 'http://servername/sites/sitename'
    $site = Get-SPSite $siteCollectionUrl
    $web = $site.OpenWeb('subsitename')

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.