Recuperare un documento dal DB di SharePoint 2003
Lo script PowerShell seguente permette di estrarre dal DB di SharePoint 2003 (WSS2 - Portal) un documento non accessibile dall'interfaccia web ma ancora presente sul DB di contenuto.
Per funzionare richiede di impostare la connection string, il nome del file con cui verra salvato e l'id del documento della tabella docs.
Per funzionare richiede di impostare la connection string, il nome del file con cui verra salvato e l'id del documento della tabella docs.
PowerShell: SPDownloadFileFromDB.ps1
# se non funge lanciare prima da linea di comando
# powershell Set-ExecutionPolicy RemoteSigned
# eseguire con: powershell .\SPDownloadFileFromDB.ps1
#estrae un documento dal DB di share point 2003e lo salva in un file
[void][System.Reflection.Assembly]::LoadWithPartialName(”Microsoft.SharePoint”)
[void][System.Reflection.Assembly]::LoadWithPartialName(”System.IO”)
[void][System.Reflection.Assembly]::LoadWithPartialName(”System.Data”)
[void][System.Reflection.Assembly]::LoadWithPartialName(”System.Data.SqlClient”)
######################################
#parametri di funzionamento da aggiornare
# connection string al db di content di SP2003
$cnnString = "Data Source=<serverName>;Initial Catalog=<dbName>;User Id=<userName>;Password=<password>";
#file su cui salvare il contenuto
$fileName = "c:\fileRecuperato.ppt";
#id della tabella Docs relativo al documento da recuperare
$id = New-Object System.Guid("{36B1275E-0D19-45D0-8424-6C02745DFD7F}");
######################################
#accesso al db
$cnn = new-object System.Data.SqlClient.SqlConnection($cnnString);
$cmd = $cnn.CreateCommand();
$cmd.CommandText = "select [content] from docs where [id]=@id";
$cmd.CommandType = [System.Data.CommandType]::Text;
$cmdPar = new-object System.Data.SqlClient.SqlParameter("@ID", [System.Data.SqlDbType]::Guid);
$cmdPar.Value = $id;
[void]$cmd.Parameters.Add($cmdPar);
$cnn.Open();
$content = $cmd.ExecuteScalar();
$cnn.Close();
######################################
# scrivo il file su disco
$fs = [System.IO.File]::Create($fileName);
$bw = new-object System.IO.BinaryWriter($fs);
$bw.Write($content);
$bw.Close();
$fs.Close();
Funziona solo con SharePoint 2003