Feb17

PowerShell & SharePoint II-Liberar los objetos SPSite y SPWeb correctamente

Tags: MOSS/WSS, PowerShell

 

En un post anterior (PowerShell & SharePoint I) comentaba los diferentes usos y el a mi parecer gran potencial de PowerShell junto con Sharepoint y mediante un sencillo ejemplo ilustraba como funciona.

Recientemente investigando mas profundamente la herramienta SPDisposeCheck me encontré con un post que precisamente habla de como liberar correctamente esos objetos.

Básicamente explica que cada nuevo comando de PS, se ejecuta en un thread distinto y por lo tanto tiene su propia pila de memoria y que si en uno de los comandos de PS se captura un objeto SPSite o SPWeb, no sirve de nada liberarlo en otra llamada, ya que la pila es distinta, esto ocasiona perdidas de memoria (memory leaks), que solo recuperaríamos al cerrar la consola de PS.

PS>  $S = New-Object Microsoft.SharePoint.SPSite(“http://localhost”)

PS>  $S.Title

Sitio de Prueba

PS> $S.Dispose()

En esta ejecución aunque capturamos el objeto SPSite y posteriormente lo liberamos, no recuperaríamos la memoria, la forma de hacer esto correctamente seria esta:

PS>  $S = New-Object Microsoft.SharePoint.SPSite(“http://localhost”);  $S.Title; $S.Dispose()

Todas las instrucciones dentro del mismo comando de PS, así todo se ejecuta en el mismo thread y puede ser liberado, solo es un poco mas lioso pero mucho mejor en términos de rendimiento. También podríamos ejecutarlo como un script que si que ejecutaría el mismo thread.

Volviendo a mi post anterior es fácil darse cuenta que tal y como esta descrito los objetos no son liberados correctamente.

Publicado: 17-Feb-09 | 0 Comentarios | 480 Enlaces a este post

Dec10

PowerShell & SharePoint I

Tags: MOSS/WSS, PowerShell

Recientemente he leído varios artículos acerca del potencial de la PowerShell en combinación con SharePoint y como en alguna ocasión he usado PowerShell, he empezado a investigar un poco acerca de su utilidad en entornos SharePoint.

Espero que este sea el primero de una serie de post dedicados a las posibilidades que ofrece PowerShell en combinación con MOSS.

Para los que no estén familiarizados con que es PowerShell, se podría resumir como un entorno de línea de comandos, con un lenguaje propio de script que permite implementar comandos (cmdlets) y en el que también permite cargar ensamblados .NET.

Una vez tenemos PowerShell instalado, lo ejecutamos, y se presenta una especie de MS-DOS .

1. Cargar la dll de Sharepoint

{System.Reflection.Assembly}::LoadWithPartialName(“Microsoft.Sharepoint”)

clip_image002[4]

2. Obtener un sitio de SharePoint

$siteurl = “http://localhost”

$site = new-object Microsoft.Sharepoint.SPSite($siteurl)

clip_image004[4]

Se puede acceder al contenido de la variable sitio simplemente ejecutando el siguiente comando:

$site

clip_image006[4]

Para obtener todos los miembros de sitio:

$site | get-member

clip_image008[4]

Y podemos mostrar los subsitios de nuestra web en formato de tabla mostrando distintas propiedades:

$site.AllWebs | format-table Url, ID, Name, AllUsers

clip_image010[4]

3. Obtener una lista de un sitio

Primero obtenemos el sitio donde se encuentra la lista y accedemos al objeto SPWeb

$siteUrl = “http://localhost:91”

$spSite = new-object Microsoft.Sharepoint.SPSite

$spWeb = $spSite.OpenWeb()

clip_image012[4]

A partir del objeto SPWeb accedemos a la lista:

$listName =”lista1”

$spList = $spWeb.Lists[$listName]

clip_image014[4]

4. Agregar una columna a una lista

A la lista que anteriormente habíamos obtenido en PowerShell, vamos a añadirle una nueva columna desde PowerShell:

clip_image016[4]

Mediante el comando

$spList.Fields.Add

Accedemos a los posibles valores del método para añadir nuevos campos:

clip_image018[4]

Y con este comando creamos una nueva columna:

$spList.Fields.Add(“Nueva Columna”, “Text”,0)

clip_image020[4]

clip_image022[4]

Algunos enlaces:

· Descargar Windows PowerShell 1.0

· SharePoint PowerShell for Beginners

· SharePoint PowerShell for Beginners - continued

Publicado: 10-Dec-08 | 0 Comentarios | 1579 Enlaces a este post