Ok guys, I did work on this script for couple of hours and came up with working solution, basically this script will copy/replace items from one SharePoint List to another SharePoint List.
Tip: Save the Source list as templace without Content and create desination list with source template and disable any workflows that are associated in destination list.
FYI: I did not test in SP 2013, this scripts runs perfectly in SP 2010.
#################################################################### #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://SharePoint/sites/Site1/" $SourceListName = "Source List" $dstListSiteUrl = "http://SharePoint/sites/Site2/" $DestinationListName = "Destination List" $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 =' 2014-11-01T02:32:20Z 2014-11-02T02:32:20Z ' $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()} } '+$keyValue+'