This Blog

Syndication

Search

Tags

Community

Email Notifications

Archives

Enlaces Recomendados

Cmdlets personalizados para SharePoint 2010

Siguiendo como referencia el articulo de Gary Lapointe : Creating Custom SharePoint 2010 Cmdlets using Visual Studio 2010. Lo que se pretende es crear cmdlets (commandlets) personalizados para SharePoint 2010 mediante la Beta 2 de Visual Studio 2010, con lo cual podremos agilizar multitud de tareas de administración en el servidor mediante la creación de scripts (fácilmente modificables) unas pocas líneas de texto en la consola de administración de SharePoint 2010.

Como al iniciar cualquier proyecto en Visual Studio iremos a: File > New > Project, posteriormente en el lenguaje que tengamos marcado como predeterminado (C# en este caso) Visual C# > SharePoint > 2010 > de las plantillas que se nos ofrecen seleccionaremos Empty SharePoint Project.

image

Al seleccionar el proyecto vacío nos saldrá la siguiente ventana, en la cual tendremos que seleccionar la aplicación web para la cual va destinada el proyecto y los privilegios que tendremos sobre la misma, desplegar como sandbox (caja de arena y puede ser desplegadas por el propietario del sito, sin necesidad del administrador) o como solución completa de granja (acceso de administrador).

image

Una vez se nos muestre nuestro proyecto vacío lo primero que debemos hacer es añadir dos referencias esenciales:  image

En la fuente de la información (marcada al inicio de este articulo) nos dice que lo podemos encontrar mediante click con botón derecho sobre References > Add Reference, en la ventana que se despliega nos movemos a la pestaña .Net y deberemos buscar las referencias marcadas en la imagen:

clip_image001 Microsoft.SharePoint.PowerShell

clip_image001[1] System.Management.Automation

En mi caso no se encontraban en esa pestaña asique tuve que buscar, las encontré en la GAC del sistema (C:\Windows\assembly\). Desde la pestaña Browse podremos acceder a esta ruta y veremos la carpeta GAC_MSIL, accedemos y dentro encontraremos las dos librerías que necesitamos. Una vez añadidas no olvidarse del using Microsoft.SharePoint.PowerShell; cuando necesitemos hacer uso de ellas. Tendremos una estructura similar.

image

El siguiente paso que debemos dar es añadir el mapeo a un directorio de SharePoint donde introduciremos un XML donde especificaremos las características de cmdlet como por ejemplo el nombre y el ensamblado. Para ello debemos hacer click derecho sobre el nombre del proyecto > Add… > SharePoint Mapped Folder… En la ventana que se despliega seleccionaremos la siguiente ruta: {SharePointRoot}/Config/PowerShell/Registration.

 

image

Con esto se nos creara en la estructura del proyecto otra carpeta llamada Registration en la cual introduciremos añadiremos un nuevo archivo xml con el mismo nombre del proyecto:

image

En el interior del xml introducimos el siguiente código, que como podemos ver contiene el nombre que utilizara el cmdlet (con la nomenclatura correspondiente a SharePoint):

<?xml version="1.0" encoding="utf-8" ?>

<ps:Config xmlns:ps="urn:Microsoft.SharePoint.PowerShell"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="urn:Microsoft.SharePoint.PowerShell SPCmdletSchema.xsd">

<ps:Assembly Name="$SharePoint.Project.AssemblyFullName$">

<ps:Cmdlet>

<ps:VerbName>Get-SPQuotaTemplate</ps:VerbName>

<ps:ClassName>SharePointProject.Quotas.SPCmdletGetQuotaTemplate</ps:ClassName>

<ps:HelpFile>SharePointProject.Quotas.dll-help.xml</ps:HelpFile>

</ps:Cmdlet>

</ps:Assembly>

</ps:Config>

Como se puede ver la ayuda del cmdlet se puede definir en este mismo apartado llamando a un xml dedicado solo a la ayuda, aunque no se vaya a crear, no dará errores.

En el siguiente apartado crearemos la lógica del cmdlet, crearemos una carpeta en la raíz del proyecto llamada Quotas y en ella incluiremos un nuevo archivo de clase, al cual llamaremos: SPCmdletGetQuotaTemplate.cs.

image

Para esta nueva clase introduciremos el siguiente código, el cual permite mostrar los datos de una plantilla de cuota en las colecciones de sitios que tengamos para la aplicación web que haya sido seleccionada al inicio del documento:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Microsoft.SharePoint;

using Microsoft.SharePoint.PowerShell;

using Microsoft.SharePoint.Administration;

using System.Management.Automation;

namespace SharePointProject.Quotas

{

[Cmdlet(VerbsCommon.Get, "SPQuotaTemplate"),

SPCmdlet(RequireLocalFarmExist = true, RequireUserFarmAdmin = true)]

public class SPCmdletGetQuotaTemplate : SPGetCmdletBase<SPQuotaTemplate>

{

protected override void InternalValidate()

{

if (this.Identity != null)

{

base.DataObject = this.Identity.Read();

if (base.DataObject == null)

{

base.WriteError(new PSArgumentException("The quota template does not exist."), ErrorCategory.InvalidArgument, this.Identity);

base.SkipProcessCurrentRecord();

}

}

}

protected override IEnumerable<SPQuotaTemplate> RetrieveDataObjects()

{

List<SPQuotaTemplate> list = new List<SPQuotaTemplate>();

if (base.DataObject != null)

{

list.Add(base.DataObject);

return list;

}

SPWebService webService = SPWebService.ContentService;

if (webService != null)

{

foreach (SPQuotaTemplate quota in webService.QuotaTemplates)

{

list.Add(quota);

}

}

return list;

}

[Parameter(Mandatory = false, ValueFromPipeline = true, Position = 0), Alias(new string[] { "Name" })]

public SPQuotaTemplatePipeBind Identity

{

get;

set;

}

}

}

Después podemos hacer build, para asegurarnos de que no hay errores de código y ya solo nos queda definir las características de despliegue del proyecto, ya que necesitaremos que intervenga por necesidad PowerShell. Para ello definimos una nueva regla de despliegue, seleccionamos las propiedades del proyecto (ya sea mediante botón derecho sobre el nombre del proyecto en el explorador de la solución o en el menú superior desplegable proyecto).

Una vez presentadas las características del proyecto debemos movernos a la pestaña SharePoint, y ahí en la zona marcada como Edit Configurations crearemos una nueva llamada PowerShell con las siguientes opciones:

image Aceptamos y seleccionamos en el desplegable la nueva configuración creada:

image

Ahora vemos seleccionar esta forma de despliegue en las características del proyecto que se muestran en el cuadro de propiedades debajo del explorador de la solución (podemos hacer botón derecho sobre el nombre del proyecto y pulsar sobre propiedades o simplemente F4 estando seleccionado el nombre del proyecto), la primera característica es Active Deployment Configuration, tendremos un desplegable y seleccionamos PowerShell:

image

Para finalizar solo debemos configurar la forma de ejecución ya que debemos ejecutarla con una aplicación externa (PowerShell para administración de SharePoint). Para ello vamos a la pestaña debug, en la opción Start action seleccionamos la segunda opción que se ofrece en los radio buttons (Start external program) y añadimos la ruta del ejecutable de PowerShell que será C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe.

En los argumentos de línea de comandos le indicaremos que se trata de la consola de administración de SharePoint 2010 (con base de PowerShell ):

-NoExit  " & ' C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\CONFIG\POWERSHELL\Registration\sharepoint.ps1 ' "

image

Una vez terminado podemos lanzar el proyecto con F5 y se nos mostrara la consola de PowerShell, si no ha habido ningún error podremos directamente consultar sobre nuestro nuevo cmdlet (que como dije anteriormente se encarga de mostrar datos de las cuotas de plantillas que utilizan las colecciones de sitios que tengamos)

clip_image001[6] Get-Command Get-SPQuotaTemplate | Format-List (consultamos sobre el cmdlet)

clip_image001[7] Get-SPQuotaTemplate (muestra los datos que haya encontrado sobre las plantillas aplicadas a las colecciones de sitios).

image

Published 30/11/2009 12:22 por jdelrio

Comparte este post: