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
Post a Comment