Skip to content

Instantly share code, notes, and snippets.

@rheid
Created July 4, 2016 06:45
Show Gist options
  • Save rheid/6b21e60760d781763aa97c37186f356a to your computer and use it in GitHub Desktop.
Save rheid/6b21e60760d781763aa97c37186f356a to your computer and use it in GitHub Desktop.
Copy SharePoint List Item
Remove-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
try
{
$srcListSiteUrl = "https://sp.bizerba.com/sites/27261"
$SourceListName = "SiteMetadataPublic"
$dstListSiteUrl = "https://sp.bizerba.com/sites/27261"
$DestinationListName = "SiteMetadata"
$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);
$sourceSPListItemCollection = $SourceList.GetItems();
foreach($srcListItem in $sourceSPListItemCollection)
{
#CAML query of the common column (generally the title column or any unique column)
$keyValue = $srcListItem[$keyColumnInternalName]
$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()}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment