copy one list item to another


####################################################################
#Copy/Replace items from one list to another list with Attachments
#Original Author:Adi
#Enhancements - Author: Indra Appala
####################################################################

Remove-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
   try
   {   
   $srcListSiteUrl = "http://win-4qnjgfbpcf3:2323/sites/test/"   
   $SourceListName = "Contacts 1000"   
   $dstListSiteUrl = "http://win-4qnjgfbpcf3:2323/sites/test/"   
   $DestinationListName = "Contact"   
   $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
     
   $filterQuery = ''   

$CategoryQuery = new-object Microsoft.SharePoint.SPQuery
$CategoryQuery.Query = $filterQuery

$sourceSPListItemCollection = $SourceList.GetItems($CategoryQuery);
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());
}           
$newSPListItem.Update()
}
}
}
catch
{
write-host $_.exception
}
finally
{       
if($sourceListWeb -ne $null){$sourceListWeb.Dispose()}
if($dstListWeb -ne $null){$dstListWeb.Dispose()}
}

Comments

Popular posts from this blog

SharePoint Integration with IIS

How to Create an Auto-Incrementing Number Field in a SharePoint List

Error:Installing product D:\exchangeserver.msi failed. Fatal error during installation. Error code is 1603.