jueves, 3 de mayo de 2012

Sharepoint Best Practices: Powershell



SharePoint Best Practices: PowerShell

Introducción
Hoy en día al desarrollar con SharePoint suele suceder que podemos tener más de un ambiente de trabajo, en muchos casos contamos con varios ambientes de desarrollo y al menos un ambiente de prueba. Por supuesto, además contamos con el ambiente productivo en el cual se encuentran los datos reales del negocio.

En el esquema “tradicional” de desarrollo de aplicaciones, es decir, fuera del mundo SharePoint, los datos del negocio suelen estar almacenados en Bases de Datos, y además solemos contar con varias de ellas para los diferentes ambientes con los que trabajamos. Generalmente estas bases son accesibles directamente por nosotros (desarrolladores) y se nos permite replicar los datos alojados en una Base de Datos a otra Base de Datos, salvo restricciones de seguridad, para poder emular escenarios a través de los diferentes ambientes.

Pero, ¿qué pasa con SharePoint? En SharePoint el asunto es un poco distinto. La manera “tradicional” de guardar datos en SharePoint es a través de las Listas, las cuales no son tan fáciles de replicar en otros ambientes. El manejo de las listas tiene sus particularidades, y el almacenamiento de sus datos en la Base  de Datos no es tan directo como con las aplicaciones “tradicionales”.

Sin embargo, actualmente, SharePoint nos ofrece distintas alternativas a la hora de poder reproducir el contenido que se encuentra en una Lista de un Servidor, o conjunto de Servidores, a una Lista de otro Servidor, o conjunto de Servidores.

Una de estas alternativas, y sobre la cual nos enfocaremos en el artículo, consiste en hacer uso de dos comandos de PowerShell que pueden ser ejecutados a través de la Consola de Administración de SharePoint y que nos permitirán tanto exportar como luego importar el contenido de una manera práctica, rápida y sencilla. Estos comandos son Export-SPWeb e Import-SPWeb respectivamente.

Cómo Exportar el Contenido de una Lista con PowerShell
Para exportar el contenido de una Lista SharePoint de un Servidor o Farm de Servidores SharePoint a través de la Consola de Administración de SharePoint debemos usar el comando Export-SPWeb, el cual nos permite exportar el contenido de una Lista SharePoint a un archivo o carpeta en el disco. Para ello deberemos seguir los siguientes dos pasos:
  1. Abrir la Consola de Administración de SharePoint como Administrador.
  2. Ejecutar el comando Export-SPWeb, tal como se muestra a continuación:
/*** EXPORT LIST ***/
Export-SPWeb -Identity [WEB_IDENTITY] -Path [EXPORT_PATH] -ItemURL /Lists/[LIST_NAME] -IncludeVersions CurrentVersion –Verbose -Force -NoLogFile
En donde se deberán configurar los siguientes parámetros:
  • -Identity [WEB_IDENTITY]: Permite indicar el Sitio Web del cual se desea exportar el contenido de la Lista SharePoint. El valor del parámetro [WEB_IDENTITY] puede ser tanto el GUID como la URL del Sitio Web.
  • -Path [EXPORT_PATH]: Permite indicar la ruta completa del archivo en el cual se exportará el contenido de la Lista SharePoint. Si la ruta contiene espacios en blanco se deberá encerrar el valor [EXPORT_PATH] con comillas dobles (").
  • -ItemURL /Lists/[LIST_NAME]: Permite indicar la ruta de la Lista SharePoint que se desea exportar. El valor del parámetro [LIST_NAME] debe ser un nombre válido que apunte a la Lista SharePoint que se desea exportar.
  • -IncludeVersions CurrentVersion: Permite indicar qué versiones del contenido de la Lista SharePoint se desean exportar. En este caso particular, sólo se exportará la versión actual.
  • -Verbose: Permite indicar si se mostrará un log por pantalla con el resultado de la exportación del contenido de la Lista SharePoint.
  • -Force: Permite sobrescribir el archivo de destino de la exportación si es que el mismo ya existe. Si no se especifica éste parámetro, por defecto el archivo no será sobrescrito.
  • -NoLogFile: Permite indicar que no se deberá crear un archivo de log al exportar el contenido de la Lista SharePoint.

A continuación se presenta un ejemplo de cómo exportar el contenido de una Lista SharePoint llamada TestList que se encuentra en el Servidor SharePoint develop01 a un archivo en disco:
/*** EXPORT LIST ***/
Export-SPWeb -Identity http://develop01:8081/ -Path "C:\Develop\BF\BF.KP.Packages\ListsContents\TestList.cmp" -ItemURL /Lists/TestList -IncludeVersions CurrentVersion -Verbose -Force -NoLogFile

Cómo Importar el Contenido a una Lista con PowerShell
Para importar el contenido de una Lista SharePoint a un Servidor o Farm de Servidores SharePoint a través de la Consola de Administración de SharePoint debemos usar el comando Import-SPWeb, el cual nos permite importar el contenido de una Lista SharePoint que haya sido previamente exportado a un archivo o carpeta en el disco, a un Servidor SharePoint, el cual podrá ser tanto el mismo Servidor como cualquier otro que tenga instalada la Definición de Lista en cuestión. Para ello deberemos seguir los siguientes dos pasos:
  1. Abrir la Consola de Administración de SharePoint como Administrador.
  2. Ejecutar el comando Import-SPWeb, tal como se muestra a continuación:
/*** IMPORT LIST ***/
Import-SPWeb -Identity [WEB_IDENTITY] -Path [IMPORT_PATH] –Verbose -NoLogFile
En donde se deberán configurar los siguientes parámetros:
  • -Identity [WEB_IDENTITY]: Permite indicar el Sitio Web en el cual se desea importar el contenido de la Lista SharePoint. El valor del parámetro [WEB_IDENTITY] puede ser tanto el GUID como la URL del Sitio Web.
  • -Path [IMPORT_PATH]: Permite indicar la ruta completa del archivo del cual se importará el contenido de la Lista SharePoint. Si la ruta contiene espacios en blanco se deberá encerrar el valor [IMPORT_PATH] con comillas dobles (").
  • -Verbose: Permite indicar si se mostrará un log por pantalla con el resultado de la importación del contenido de la Lista SharePoint.
  • -NoLogFile: Permite establecer que no se deberá crear un archivo de log al importar el contenido de la Lista SharePoint.

A continuación se presenta un ejemplo de cómo importar el contenido de la Lista SharePoint exportada anteriormente al archivo TestList.cmp, pero al Servidor SharePoint develop02:
/*** IMPORT LIST ***/
Import-SPWeb -Identity http://develop02:8081/ -Path "C:\Develop\BF\BF.KP.Packages\ListsContents\TestList.cmp" -Verbose –NoLogFile

Sugerencias al Exportar e Importar Contenido de Listas SharePoint
Si bien en primera instancia el manejo de la exportación e importación del contenido de Listas SharePoint parece una tarea fácil y hasta trivial, la misma puede presentar ciertas complicaciones, especialmente a la hora de importar contenido desde otros Servidores.
Es por ello deberemos tener presentes las siguientes cuestiones al exportar e importar el contenido de Listas SharePoint:

  • Antes de importar el contenido de una Lista de SharePoint es necesario tener instalada y activada la Definición de Lista correspondiente, sino el proceso puede arrojar errores inesperados al tratar de crear nuevamente la Lista SharePoint.
  • El proceso de importación además de cargar el contenido de la Lista SharePoint, crea una nueva instancia de la misma si es que ésta no existe. Por lo tanto, si se desea reproducir un ambiente en otro Servidor SharePoint será necesario eliminar manualmente la Lista SharePoint si es que la misma ya existiese en el Servidor de destino a fin de evitar posibles inconvenientes con los datos ya existentes.
  • Si la Lista SharePoint que se está tratando de importar tiene un campo con una referencia LookUp a otra Lista SharePoint, primero se deberá importar el contenido de la Lista SharePoint referenciada de manera que cuando se importe la Lista que posee la referencia, pueda encontrar el contenido apuntado en la Lista de Referencia. Si el proceso se hiciera al revés, o si la lista no existiese, el proceso de importación arrojaría resultados inesperados.

Por último, vale la pena aclarar que tanto al exportar como al importar el contenido de una Lista SharePoint de un Servidor o una Farm de Servidores SharePoint será necesario ejecutar la ventana de la Consola de Administración de SharePoint con privilegios de usuario Administrador, ya que se requieren de permisos especiales para poder ejecutar los comandos Export-SPWeb e Import-SPWeb.

Otros Usos Para los Comandos Export-SPWeb e Import-SPWeb
Si bien en el presente artículo se usaron los comandos Export-SPWeb e Import-SPWeb para permitir la exportación e importación del contenido de Listas SharePoint, estos dos comandos se pueden usar para exportar e importar cualquier tipo de objeto SharePoint, entre los cuales se pueden enumerar:
  • Colecciones de Sitios
  • Aplicaciones Web
  • Bibliotecas
  • Listas

En Baufest

En Baufest, quienes construimos sobre Sharepoint, el uso de PowerShell forma parte de nuestras buenas practicas a la hora de implementar lo que construimos, siempre y cuando encajen en el governance de nuestro cliente.
Hemos encontrado que la mejor manera de equilibrar las personalizaciones solicitadas y una sólida metodología con Best Practices de implementación es el uso de PowerShell en lugar de código creado en la activación de Features y otros eventos en los paquetes de soluciones. Es mandatorio establecer cuando y porque PowerShell - y no una compiled Feature y Solution Packages (WSPs)

Gracias a Ariel Bensussan por haber colaborado con este artículo.

Seguinos en Twitter