Para este articulo presentaré un procedimiento y scripts para leer el contenido de SharePoint Server 2007 a nivel de Transac-SQL ya que no contamos con PowerShell para esta versión de forma predeterminada (es posible instarlo, pero en ciertos ambientes por las restricciones dentro de la organización es una complicación). Y para SharePoint Server 2013 utilizaremos PowerShell .
La idea es generar un archivo CSV desde SQL Server desde el Management Studio para que basado en este archivo podamos de lado de SharePoint Server 2007 vía PowerShell leer el documento e ir validando por medio del modelo de objetos de SharePoint a nivel de PowerShell si existe dicho contenido y si el contenido es el más reciente.
Select
Top W.FullUrl, W.Title, L.tp_Title as ListTitle, A.tp_DirName, A.tp_LeafName, A.tp_id , DS.Content , DS.Size, D.DocLibRowID, D.TimeCreated, D.Size, D.MetaInfoTimeLastModified, D.ExtensionForFile
From
your_content_database.dbo.AllLists L With (NoLock) join
your_content_database.dbo.AllUserData A With (NoLock)
On L.tp_ID=tp_ListId join
your_content_database.dbo.AllDocs D With (NoLock)
On A.tp_ListID=D.ListID
And A.tp_SiteID=D.SiteID
And A.tp_DirName=D.DirName
And A.tp_LeafName=D.LeafName join
your_content_database.dbo.AllDocStreams DS With (NoLock)
On DS.SiteID=A.tp_SiteID
And DS.ParentID=D.ParentID
And DS.ID=D.ID join
your_content_database.dbo.Webs W With (NoLock)
On W.ID=D.WebID
And W.ID=L.Tp_WebID
And W.SiteID=A.tp_SiteID
Where
DS.DeleteTransactionID=0
And D.DeleteTransactionID=0
And D.IsCurrentVersion=1
And A.tp_DeleteTransactionID=0
And A.tp_IsCurrentVersion=1
And D.HasStream=1
And L.tp_DeleteTransactionId=0
And ExtensionForFile not in ('webpart','dwp','aspx','xsn','master','rules','xoml')
And D.MetaInfoTimeLastModified>DateAdd(d,-1,GetDate())
Order by DS.Size desc
Referencia donde lo saque:
El formato a generar el archivo csv elegí que fuera el siguiente:
url,list,document,fullurl,created,modified
Entonces la versión original de arriba la modificamos de la siguiente forma:
Select
Top W.FullUrl, L.tp_Title as ListTitle, A.tp_LeafName, A.tp_DirName, D.TimeCreated,D.MetaInfoTimeLastModified
From
your_content_database.dbo.AllLists L With (NoLock) join
your_content_database.dbo.AllUserData A With (NoLock)
On L.tp_ID=tp_ListId join
your_content_database.dbo.AllDocs D With (NoLock)
On A.tp_ListID=D.ListID
And A.tp_SiteID=D.SiteID
And A.tp_DirName=D.DirName
And A.tp_LeafName=D.LeafName join
your_content_database.dbo.AllDocStreams DS With (NoLock)
On DS.SiteID=A.tp_SiteID
And DS.ParentID=D.ParentID
And DS.ID=D.ID join
your_content_database.dbo.Webs W With (NoLock)
On W.ID=D.WebID
And W.ID=L.Tp_WebID
And W.SiteID=A.tp_SiteID
Where
DS.DeleteTransactionID=0
And D.DeleteTransactionID=0
And D.IsCurrentVersion=1
And A.tp_DeleteTransactionID=0
And A.tp_IsCurrentVersion=1
And D.HasStream=1
And L.tp_DeleteTransactionId=0
And ExtensionForFile not in ('webpart','dwp','aspx','xsn','master','rules','xoml')
And D.MetaInfoTimeLastModified>DateAdd(d,-1,GetDate())
Order by DS.Size desc
El Script de mi autoría para SharePoint 2013 es el siguiente:
$filename = "ModificadoApartirDel20Sep2014_RRHH"
$importedFile = "E:\migracion\Cambios\"+$filename+".csv"
$contents = Import-Csv -LiteralPath $importedFile
$outfile = "e:\migracion\Cambios\"+$filename+"_log.csv"
$linea = "Estado,url,Creado Origen,Creado Destino,Modificado Origen,Modificado Destino"
add-content $outfile $linea
foreach ($row in $contents) {
#write-host $row.url $row.list $row.document
#write-host $row.document $row.created $row.modified
# Web URL
$hostname = https://hostname/
$urlWeb = $hostname + $row.url
$web = Get-SPWeb -Identity $urlweb
# SPList name
$listname = $row.list
$list = $web.Lists[$listname]
$items = $list.Items
$encontrado = $false
#foreach($field in $list.fields)
#{
# write-host "Field: " $field.Title
#}
$linea = ""
foreach($item in $items){
if($item.Name -eq $row.document)
{
if($item["Created"] -gt $row.created -or $item["Modified"] -gt $row.modified){
$encontrado = $true
$linea = "Sin Actualizar," +$hostname +$row.fullurl+ "/" +$item.Name+","+$rowcreado+","+$itemcreado+","+$rowmodificado+","+$itemmodificado
add-content $outfile $linea
}else {
$linea = "Actualizado," +$hostname +$row.fullurl+ "/"+ $item.Name+","+$rowcreado+","+$itemcreado+","+$rowmodificado+","+$itemmodificado
add-content $outfile $linea
}
break
}
}
if ($encontrado){
$linea = "No Encontrado,"+$hostname + $row.fullurl+ "/" +$row.document+","+$rowcreado+","+$itemcreado+","+$rowmodificado+","+$itemmodificado
add-content $outfile $linea
}
}
SharePoint4Fun!,
Juan Manuel Herrera Ocheita