Tuesday, June 30, 2015

Copy/Move ListItems from one list to another (site) list- PowerShell

Copy/Move List Items from one list to another (site's) list- PowerShell, With Author & Editor.


Remove-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
   try
   {   
   $srcListSiteUrl = "http://RaviMaloth:9870/blog/"   
   $SourceListName = "Posts"    
   $dstListSiteUrl = "http://RaviMaloth:9870/test/"   
   $DestinationListName = "Posts"    
   $keyColumnInternalName = "Title"    

   $sourceListWeb = Get-SPWeb -identity $srcListSiteUrl   
   $sourceListUrl = $sourceListWeb.ServerRelativeUrl + "/lists/" + $SourceListName;    
   $dstListWeb = Get-SPWeb -identity $dstListSiteUrl   
   $destinationListUrl = $dstListWeb.ServerRelativeUrl + "/lists/" + $DestinationListName;
   $SourceList = $sourceListWeb.GetList($sourceListUrl);  
   $DestinationList = $dstListWeb.GetList($destinationListUrl);

 #Filtering Items based on the Date as we do not want to archive all items in the list

$sourceSPListItemCollection = $SourceList.GetItems();
Write-Host Total Items to Copy : $sourceSPListItemCollection.Count  #Always better to know the number of items before we start copying to destination list

foreach($srcListItem in $sourceSPListItemCollection)
   {          
   #CAML query of the common column (Title)
   $keyValue = $srcListItem[$keyColumnInternalName]
    Write-Host $keyValue
    $camlQuery ='<Where><Eq><FieldRef Name='+$keyColumnInternalName+' /><Value Type="Text">'+$keyValue+'</Value> </Eq> </Where>'
    $spQuery = new-object Microsoft.SharePoint.SPQuery
    $spQuery.Query = $camlQuery
    $spQuery.RowLimit = 1
   
    #check if the item is already present in destination list
   
    $destItemCollection = $DestinationList.GetItems($spQuery)
   
        if($destItemCollection.Count -gt 0)
                {
                write-host "list item already exists, updating "
                foreach($dstListItem in $destItemCollection)
                    { 
                        foreach($spField in $dstListItem.Fields)
                                {
                                    if ($spField.ReadOnlyField -ne $True -and  $spField.InternalName -ne "Attachments")
                                            {
                                                $dstListItem[$spField.InternalName] = $srcListItem[$spField.InternalName];
                                            }
                                }
                    # Handle Attachments
                    foreach($leafName in $srcListItem.Attachments)
                        {              
                            $spFile = $SourceList.ParentWeb.GetFile($srcListItem.Attachments.UrlPrefix + $leafName)
                            $dstListItem.Attachments.Add($leafName, $spFile.OpenBinary());
                            }             
                            $dstListItem.Update()
                            }
                            }       
        else
        {           
            write-host "adding new item"
           
            $newSPListItem = $DestinationList.AddItem();
            foreach($spField in $srcListItem.Fields)
            {
                if ($spField.ReadOnlyField -ne $True -and  $spField.InternalName -ne "Attachments")
                {
                $newSPListItem[$spField.InternalName] = $srcListItem[$spField.InternalName];
                
                }
            }
                # Handle Attachments
                foreach($leafName in $srcListItem.Attachments)
                {               
                $spFile = $SourceList.ParentWeb.GetFile($srcListItem.Attachments.UrlPrefix + $leafName)
                $newSPListItem.Attachments.Add($leafName, $spFile.OpenBinary());
                  
                }   
                                 # $dstListWeb.EnsureUser($srcListItem["Author"]);
                                $newSPListItem["Author"] =    $srcListItem["Author"]; 
                                 $newSPListItem["Editor"] =    $srcListItem["Editor"];   
                $newSPListItem.Update()
        }
    }
}
    catch
        {
        write-host $_.exception
        }
    finally
        {       
        if($sourceListWeb -ne $null){$sourceListWeb.Dispose()}
        if($dstListWeb -ne $null){$dstListWeb.Dispose()}
        }

No comments:

Post a Comment