Top Banner

of 21

Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

Jun 02, 2018

Download

Documents

tpcjose
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    1/21

    www.solidq.com

    Windows PowerShell para desarrolladores

    SharePoint: Tu nuevo mejor amigo

    Probablemente, si se le preguntara a algn administrador de la familia de servidores deMicrosoft, cul es la herramienta sin la cual no podra vivir, ste le dira Windows PowerShell. Y

    hablamos de un producto que se puede considerar relativamente nuevo. No obstante, desde

    su lanzamiento el 25 de Abril de 2006, ya se vio el potencial de este intrprete de comandos

    (shell), que permita automatizar tareas administrativas de una manera rpida, sencilla y

    eficiente.

    Los administradores y desarrolladores de SharePoint, tuvieron que esperar hasta la versin 2010

    para ver qu se estaban perdiendo. Si bien anteriormente contaban con la herramienta

    STSADM1para realizar ciertas operaciones administrativas, el cambio a Windows PowerShell,

    me atrevera a decir, fue comparable al cambio que se produjo a principios del siglo pasado alpasar de los vehculos tirados por caballos, a los nuevos vehculos a motor (dentro de su

    contexto, obviamente).

    Lo que se pretende en el siguiente artculo, es conocer las bondades que ofrece el intrprete de

    comandos Windows PowerShell, pero enfocado al desarrollador SharePoint. Al cabo del

    da/semana/mes, un desarrollador de SharePoint se enfrenta a tareas comunes, tales como el

    desarrollo de elementos webs (WebParts) y su posterior despliegue en una o varias pginas web,

    el despliegue del paquete de una solucin, la modificacin masiva de elementos de listas por

    cualquier motivo, etc. Si bien estas tareas, pueden ser resueltas como toda la vida se ha hecho,

    la ayuda de Windows PowerShell supone un aumento de la productividad increble, al ver

    reducida dicha tarea, a un guion o scriptde PowerShell, que puede ser lanzado cuando venga

    en gana, para realizar exactamente lo que se pretende, en el orden que se pretende.

    Recuerdo en mis aos de juventud (de esto no har tanto), cuando el despliegue en produccin

    de un elemento web (WebPart) que deba aparecer en un cierto nmero de pginas, se volva la

    tarea ms tediosa del mundo. El da que hice mi primer script, para hacer esa misma tarea en

    segundos, me di cuenta de cuntas horas de mi vida haba perdido. Por ello, considero muy

    necesario que todo desarrollador SharePoint debe tener al menos nociones bsicas sobres el

    manejo de Windows PowerShell. No se trata de convertirse en maestros del scripting, pero s

    contar con unos conocimientos bsicos sobre Windows PowerShell para que, llegado el

    momento, poder desarrollar un scriptque permita realizar en segundos, tareas que de otro

    modo podran llevar horas.

    1

    La herramienta STSADM no se ha eliminado. Sigue presente incluso en SharePoint 2013. La podemosencontrar bajo la ruta C:\Program Files\Common Files\microsoft shared\Web ServerExtensions\15\BIN

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    2/21

    www.solidq.com

    1. Por qu Windows PowerShell?

    Si bien el lector de este artculo puede saber de antemano qu es Windows PowerShell y para

    quin va destinado, considero que es interesante comentar de dnde surge por parte de

    Microsoft la necesidad de crear otro entorno de lnea de comandos (recordemos que CMD.exeexiste desde los tiempos de Windows NT), y cules son sus principales caractersticas.

    As pues, frecuentemente se le ha criticado a Microsoft el hecho de no proporcionar en sus

    sistemas operativos un intrprete de comandos (shell) con el cual se pudiera gestionar el 100%

    de las caractersticas del entorno. Era evidente, que la comparacin del intrprete de comandos

    entre entornos UNIX y Windows, no dejaba en buen lugar al segundo. Una explicacin de por

    qu en un principio Microsoft no prest demasiada atencin a su intrprete de comandos, es

    por que histricamente, Microsoft puso todo su esfuerzo en el desarrollo de la interfaz grfica.

    Microsoft debi pensar que al usuario medio no le preocupa demasiado el intrprete de

    comandos. Pero es notorio, que si bien esta estrategia ha resultado muy exitosacomercialmente, ha alejado de los entornos Windows a los profesionales IT y administradores

    que han exigido siempre una mejora en este mbito. Por ello, y en la estrategia seguida por

    Microsoft en los ltimos aos, de mejorar notablemente aquellos puntos ms dbiles de sus

    sistemas, surgi Windows PowerShell.

    Es importante aclarar que Windows PowerShell engloba con su nombre tanto un intrprete de

    comandos (shell), como un lenguaje de scripting propiamente dicho, siendo la principal

    caracterstica del mismo su orientacin a objetos. Esto es: tradicionalmente, los intrpretes de

    comandos reciben texto como parmetros de entrada, e igualmente devuelven texto como

    resultado. En Windows PowerShell, los parmetros de entrada y salida, son instancias de objetos.NET, lo que le convierte en una herramienta infinitamente ms verstil y capaz. Los encargados

    de procesar dichos parmetros de entrada y salida son los cmdlets (se pronuncia command-

    let), que se podran definir como pequeas clases .NET que el usuario percibe como comandos

    clsicos. Existen alrededor de unos 1300 cmdletsen una instalacin bsica de Windows 8.1. Y

    este nmero se incrementa si contamos todos los entornos que aaden cmdletspropios (como

    es el caso de SharePoint). Un ejemplo de cmdletsera el siguiente:

    Get-Process

    Con dicho cmdletse obtienen todos los procesos que se estn ejecutando en un momento dado.Una caracterstica importante de los cmdlets, es que semnticamente estn compuestos por un

    verbo (Get) y un nombre (Process), lo cual permite adivinar cul es la accin que realiza.

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    3/21

    www.solidq.com

    2. Mientras tanto, en SharePoint 2007

    Mientras tanto en SharePoint 2007 exista (y sigue existiendo) una herramienta de lnea de

    comandos llamada STSADM. Hasta la llegada de SharePoint 2010, era el nico medio que tena

    el administrador de SharePoint para automatizar tareas frecuentes como copias de seguridad,restauracin de las mismas, manejo de las caractersticas (features), etc.

    Como se ha dicho, SharePoint 2010 vino con la integracin a Windows PowerShell bajo el brazo,

    por lo que la pregunta se haca evidente: Qu pasa con STSADM? El mensaje que lanz

    Microsoft fue algo tal que as: tienes un coche de toda la vida, con el que has compartido buenos

    momentos, no te ha fallado demasiado, ha estado en momentos importantes de tu vida (ese

    primer amor), perola familia crece, y necesitas un coche nuevo, ms potente y grande. Por lo

    que ahora tienes uno nuevo que te permite hacer todo lo que hacas con el anterior, y otras

    muchsimas cosas que no podas hacer. Por qu ibas a seguir usando el viejo? Por lo tanto,

    como el coche viejo, y a donde quiero llegar, STSADM qued condenado a quedar en el olvidoms pronto que tarde. En resumen, STSADM sigue existiendo incluso en SharePoint 2013, pero

    nicamente por cuestiones de compatibilidad. Para nuevos desarrollos, Microsoft insta a usar

    Windows PowerShell. Existe adems un documento muy til, en el que se detallan las

    equivalencias de comandos entre STSADM y PowerShell2.

    3. Y lleg SharePoint 2010.

    Ya lo hemos comentado en varias ocasiones: desde SharePoint 2010 tenemos integracin conWindows PowerShell, pero hasta dnde llega dicha integracin? Qu se puede y no se puede

    hacer? Bien, basta con echar un vistazo a todos los cmdletsque SharePoint trae consigo3, cerca

    de los 800 (frente a los 200 comandos de STSADM), para darse cuenta que con Windows

    PowerShell es posible prcticamente gestionarlo todo. Ms aun teniendo en cuenta que

    Windows PowerShell es adems un lenguaje de scripting, por lo que contamos con las sentencias

    habituales de bucles, condiciones, variables etc. Combinando todo esto, los cmdlets, ms las

    estructuras tpicas de programacin, se puede automatizar prcticamente cualquier tarea para

    SharePoint. Como se suele decir, el lmite es la imaginacin: Microsoft te ofrece todas las piezas

    habidas y por haber, de tu habilidad como desarrollador depende lo que construyas con ellas.

    2http://technet.microsoft.com/es-es/library/ff621084.aspx3http://technet.microsoft.com/en-us/library/ff678226.aspx

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    4/21

    www.solidq.com

    4. En qu nivel estamos?

    Como dice mi santa madre: a todohay quien gane. Queriendo decir la mujer, que no importa

    cun bueno seas en algo, siempre hay alguien mejor (s, positivismo de andar por casa). A lo cual

    pienso yo: igual no necesito/quiero ser mejor. Me explico: me gusta jugar al ftbol, lo practicocon frecuencia, pero obviamente, hay miles de personas que viven de ello, que son infinitamente

    mejores que yo, y obviamente, no me planteo competir con ellos. Simplemente, con las

    habilidades que tengo me es suficiente, para las tareas que tengo que realizar. Igual ocurre en

    el mundo del scripting. Uno puede tener distintos niveles de habilidad y manejo, segn tambin

    las necesidades que tenga. Exactamente, para Windows PowerShell, yo distingo los siguientes

    niveles:

    Este artculo est orientado a alcanzar el segundo nivel. Usar cmdlets para consultar

    propiedades de elementos SharePoint es lo bsico. No se requieren habilidades especiales en

    programacin, tan solo saber qu es lo que se quiere consultar, y qu cmdletusar. Obviamente

    no es necesario (ni sano) saber de memoria todos los cmdlets disponibles, ya que existen

    multitud de recursos disponibles para consultar4

    .

    El tercer nivel, es para aquellos desarrolladores o administradores, que trabajan a diario con

    Windows PowerShell y quieren un paso ms en cuanto a personalizacin y automatizacin de

    procesos. Para ello disean sus propios cmdlets, para realizar o bien tares muy especficas, o un

    conjunto de ellas. Existe mucha documentacin al respecto5.

    4

    http://www.microsoft.com/resources/TechNet/en-us/Office/media/WindowsPowerShell/WindowsPowerShellCommandBuilder.html5http://msdn.microsoft.com/en-us/library/ee534984.aspx

    Nivel 3: Crearcmdlets

    Nivel 2: Disearscripts

    Nivel 1: Usar cmdlets

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    5/21

    www.solidq.com

    5. Las cuatro cosas que debes saber.

    Como deca anteriormente, Windows PowerShell es tambin un lenguaje de scripting, y por

    tanto, cualquier desarrollador va a poder hacer uso de sus sentencias de iteracin,

    condicionales, objetos etc., sin mucha dificultad. Como decan algunos profesores deuniversidad, si sabes programar en un lenguaje, sabes programar en todos. No obstante, hay

    unas cuantas funcionalidades de Windows PowerShell que s debes conocer, porque a partir de

    ellas, se puede sacar mucho partido a Windows PowerShell, y construir prcticamente cualquier

    script.

    1.Definicin de variables.Para definir variables en Windows PowerShell lo nico que hay que tener en cuenta es que

    se definen usando el carcter reservado $.

    $var = Get-Process

    Y no olvidar que almacenan objetos y no texto (a diferencia de otros lenguajes de scripting).

    Es por eso que a una variable se le puede asignar el resultado de la operacin de algn

    cmdlet, para usarlo ms tarde.

    2.Pipelines (tuberas).

    Prcticamente, todo el potencial de Windows PowerShell, viene de la posibilidad de

    concatenar la salida de un cmdlet a la entrada de otro. Esta explicacin tan parca, es en

    resumen lo que hacen los pipelines. Recordemos que la principal caracterstica de Windows

    PowerShell es que trabaja con objetos, en vez de con texto planto, y es por ello que lospipelinescobran aqu una vital importancia. Veamos un ejemplo. Supongamos que tenemos

    un cmdlet, que devuelve figuras geomtricas en distintos colores:

    Get-Figuras

    Y devuelve una coleccin de figuras tal que as:

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    6/21

    www.solidq.comCmo haramos para obtener solo las figuras de color azul? O cmo haramos para

    escribir un informe de todas las figuras en un documento de texto? Para ello tenemos los

    pipelines o tuberas:

    Get-Figuras |Where-Object {$_.Color eq Azul}

    Como vemos, lo que define un pipelineo tubera es el carcter vertical(AltGr + 1). En el

    momento que escribimos ese carcter, lo que estamos diciendo es: todas las figuras

    geomtricas obtenidas por el comando anterior, las pasamos como parmetro de entrada

    al comando siguiente. En este caso el comando siguiente es el cmdlet Where-Object.

    Qu es lo que hace este cmdlet? Vamos al tercer punto.

    3.Where-Object.

    Si nos fijamos en la sentencia del ejemplo anterior, prcticamente est todo dicho acerca

    de lo que el comando o cmdletWhere-Object hace. Dada una coleccin de objetos, permite

    filtrar entre ellos. As de simple. As de potente. Hay que tener en cuenta que la

    combinacin de caracteres $_sirve para hacer referencia al objeto actual (algo as como

    el this de toda la vida) y que hay que utilizar los operadores lgicos y de comparacin

    propios de Windows PowerShell.

    Operador Descripcin

    -eq Igual que-lt Menos que

    -gt Mayor que-ge Mayor o igual que-le Menor o igual que-ne No igual que

    Supongamos ahora que, siguiendo con el ejemplo anterior de las figuras, queremos hace lo

    siguiente: obtener primer todas las figuras, a continuacin, filtrar entre ellas para obtener

    las que son de color naranja, y finalmente, modificar el color de estas por el color verde. Es

    decir, necesitamos iterar el resultado obtenido tras el filtrado Cmo hacemos esto? Vamosal siguiente punto.

    Operador Descripcin

    -not Negacin! Negacin

    -and Y lgico-or O lgico

    Tabla 1: Operadores de comparacin

    Tabla 2: Operadores lgicos

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    7/21

    www.solidq.com

    4.ForEach-ObjectLa situacin que comentaba en el punto anterior se resolvera de la siguiente manera:

    Get-Figuras |Where-Object {$_.Color eq Naranja} |

    Foreach-Object{$_.SetColor color verde}

    Volvemos a usar unpipelinepara pasar los resultados del cmdletWhere-Object al cmdlet

    ForEach-Object, y es ste el que internamente se encarga de iterar por todas las figuras, y

    llamar a su mtodo correspondiente para cambiar el color.

    ForEach-Object vs Foreach

    Hay un asunto que crea confusin en los desarrolladores que se inician en Windows

    PowerShell, y es que existen dos formas de realizar iteraciones o bucles dentro de unacoleccin de objetos. Podemos usar la sentencia ForEach-Object que comentbamos

    anteriormente, o bien podemos usar la sentencia Foreach. Parecen iguales, pero no lo son.

    Cul es la diferencia entonces? Cul debemos usar? Veamos ejemplos de uso de cada

    uno. Para un vector de nmeros como el que sigue:

    $nums = 1,2,3,4,5,6,7,8,9,10,12,14,15,56,35,88

    Podemos iterar a travs de ellos con Foreach-Object tal que as:

    $nums | ForEach-Object { Write-Host Num: $_}

    Y de la siguiente forma con ForEach:

    Foreach ($num in $nums) { Write-Host Num: $_}

    La principal diferencia es que mientras el cmdlet ForEach-Object puede recibir la coleccin

    de objetos mediante un pipeline, la sentencia Foreach necesita que dicha coleccin de

    objetos est almacenada en memoria. ForEach-Object no necesita que los objetos de la

    coleccin estn en memoria para poder procesarlos, si no que va iterando secuencialmente

    por ellos conforme van llegado desde el pipeline. Es decir, volviendo al ejemplo anterior de

    las figuras:

    Get-Figuras | Where-Object {$_.Color eq Rojo} |

    Foreach-Object{$_.SetColor color verde}

    ForEach-Object no necesita que el cmdlet Where-Object haya terminado de filtrar todas las

    figuras, y enviar el resultado a continuacin, si no que uno a uno, se envan los objetos a

    ForEach-Object. En contrapuesta, la sentencia Foreach itera ms rpido entre una coleccin

    de objetos. Conclusin? Si la coleccin de sitios a iterar est almacenada en memoria,

    usar Foreach; si por el contrario la coleccin de objetos es el resultado de un

    procesamiento previo, como un filtrado, etc., usar ForEach-Object.

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    8/21

    www.solidq.com

    6. Dnde empiezo a escribir?

    Ya hemos hecho un breve repaso sobre las caractersticas de Windows PowerShell, ya sabemos

    algo ms de sus inicios, y de su alianza con SharePoint desde la versin 2010. El siguiente pasoes empezar a hacer uso de l, y esto nos plantea la siguiente pregunta: Dnde y cmo empiezo

    a escribir y ejecutar mis scriptspara SharePoint? Tenemos varias opciones:

    1.SharePoint 2013 Management Shell

    Este sera nuestra primera toma de contacto con los cmdlets de SharePoint. Se trata de una

    lnea de comandos de Windows PowerShell, donde podemos ejecutar directamente

    cmdlets. La particularidad de esta lnea de comandos es que carga inicialmente, de manera

    automtica, todos los cmdletspropios de SharePoint. Cmo lo hace? Para responder a esta

    pregunta, primero tendramos que aclarar un concepto previo: los snapins.

    Windows PowerShell funciona con el uso de los snapins. Bsicamente un snapines una DLL

    instalada en la GAC que implementa una interfaz. Lo cual significa que es posible desarrollar

    snapinspropios para realizar cualquier tarea que se desee. As pues, todos los cmdlets de

    SharePoint se encuentran en la DLL Microsoft.SharePoint.PowerShell.dll

    Por lo que, para explicar cmo funciona internamente Microsoft SharePoint 2013

    Management Shell (lo mismo aplica para la versin 2010, SharePoint 2010 Management

    Shell), debemos ver a ste como un mero acceso directo a Windows PowerShell, que

    cuando es lanzado, carga un scriptque se encuentra en la siguiente ruta6:

    C:\Program Files\Common Files\microsoft shared\Web Server

    Extensions\15\CONFIG\POWERSHELL\Registration\sharepoint.ps1

    6En SharePoint 2010, dicho scriptse encuentra en la misma ruta, solo que bajo la carpeta 14.

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    9/21

    www.solidq.comEn dicho script, podemos encontrar entre otras, la siguiente instruccin:

    Add-PSSnapin Microsoft.SharePoint.PowerShell

    Y como podrs suponer, es mediante el cmdlet Add-PSSnapin como se pueden cargar

    nuevos snapins al intrprete de comandos, en este caso, la DLLMicrosoft.SharePoint.PowerShell necesaria.

    Para empezar a escribir un script, podemos usar el editor con el que ms cmodo nos

    sentamos (desde el Blog de Notas de toda la vida, hasta Visual Studio), y una vez terminado

    guardar el mismo en un archivo con extensin PS1. Despus accedemos a la localizacin de

    este archivo desde el intrprete, y ejecutamos el mismo. Hay otra opcin, que veremos ms

    adelante, que integra en un mismo entorno, un editor de scripts y el intrprete de

    comandos de Windows PowerShell.

    2.Windows PowerShell

    Otra opcin, es usar la lnea de comandos que viene incluido desde Windows 7. Esta lnea

    de comandos es, a mi juicio, ms potente, ya que permite acciones como por ejemplo

    seleccionar texto, pegar texto haciendo clic con el botn derecho, posicionar el cursor con

    el ratn, etc.

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    10/21

    www.solidq.comAdems, el fondo de pantalla por defecto (es configurable) en azul resulta ms amigable,

    aunque aqu tambin entran en juego los gustos personales de cada uno. Por otro lado, no

    vienen incluidos los cmdlets de SharePoint, por lo que el primer paso sera escribir el

    siguiente comando:

    Add-PSSnapin Microsoft.SharePoint.PowerShell

    Ms adelante, veremos cmo es posible crear lo que se conoce como perfiles, para que

    de manera similar a SharePoint 2013 Management Shell, se incluyan los cmdlets de

    SharePoint en todas las lneas de comandos de Windows PowerShell.

    Nuevamente, los scripts los escribiramos en el editor con que nos sentamos ms cmodos,

    y despus los ejecutaramos desde esta lnea de comandos.

    3.Windows PowerShell ISE

    ISE son las siglas de Integrated Scripting Environment. La definicin ms detallada es la que

    encontramos en la documentacin de Microsoft:

    Windows PowerShell ISE es una interfaz grfica de usuario para Windows PowerShell que

    permite ejecutar comandos, as como escribir, editar, ejecutar, probar y depurar scripts en

    la misma ventana. Ofrece hasta ocho entornos de ejecucin independientes e incluye un

    depurador integrado, funciones de edicin de varias lneas, ejecucin selectiva, sintaxis de

    colores, numeracin de lneas y columnas y ayuda contextual.

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    11/21

    www.solidq.comPersonalmente, considero que es la mejor opcin para escribir scriptsde manera profesional.

    Permite depuracin, de manera similar a como se hara desde un entorno de Visual Studio,

    estableciendo puntos de ruptura, y con ejecuciones paso a paso, lo que lo hace realmente til.

    Carga automtica de loscmdletsde SharePoint 2010 en Windows PowerShell ISE

    Windows PowerShell 3.0 y Windows PowerShell ISE 3.0 vienen instalados por defecto en

    Windows Server 2012. Por el contrario, en Windows Server 2008/R2 tenemos que instalar

    el ISE manualmente. Vamos a ver paso a paso cmo sera dicha instalacin en un servidor

    Windows Server 2008 R2, y a continuacin veremos el procedimiento para incluir

    automticamente, cuando se inicia el entorno, los cmdletsde SharePoint.

    Instalar Windows PowerShell ISE en Windows Server 2008 R2

    1.

    Acceder a Server Manager.

    2.

    Clic en el nodo de Caractersticas (Features).

    3. Clic en el enlace a Aadir Caracterstica (Add Features).

    4. Marcar la casilla Windows PowerShell Integrated ScriptingEnvironment.

    5.

    Clic en siguiente (Next), para iniciar la instalacin.

    6.

    Y finalmente, esperar a que el proceso de instalacin termine.

    Una vez instalada la herramienta, podemos acceder a ella desde el men Inicio,

    accediendo a Todos los programas, y una vez all, Accesorios, y lo encontramos en

    la carpeta PowerShell.

    El siguiente paso es conseguir que cuando se ejecute el ISE, se carguen automticamente

    los cmdletsde SharePoint, aadiendo para ello el snapincorrespondiente. Para ello,

    vamos a hacer uso del concepto de los perfiles (profiles) mencionado

    anteriormente. Bsicamente, un perfil es un script que se ejecuta cuando se inicia

    Windows PowerShell ISE, con el objeto de crear y tener accesibles variables, alias,

    funciones, o comandos que el usuario usa con frecuencia. Conviene tener en cuenta el

    alcance de dicho perfil, es decir, para qu usuarios va destinado, incluso para qu

    mquinas de una red. En la siguiente tabla, se citan todas las posibilidades. La variable

    $profile, y sus variantes, contiene la direccin fsica hacia el archivo .PS1 que constituye

    el perfil.

    Tipo de perfil Ruta del perfil (alias)

    Usuario y mquina actual$profile.CurrentUserCurrentHost$profile

    Todos los usuario, mquina actual $profile.AllUsersCurrentHostUsuario actual, todas las mquinas $profile.CurrentUserAllHostsTodoslos usuarios, todas la mquina $profile.AllUsersAllHosts

    Tabla 3: Tipos de perfiles (profiles)

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    12/21

    www.solidq.com

    Crear un perfil para el usuario actual, en la mquina actual.

    1.

    Abrimos un instancia de Windows PowerShell ISE como administrador, y

    lanzamos lo siguiente:

    if (!(test-path $profile.AllUsersCurrentHost)){new-item -type file path

    $profile.AllUsersCurrentHost -force}

    2. Seguidamente, lanzamos el siguiente comando, para editar el nuevo perfil:

    psEdit $profile.AllUsersCurrentHost

    3. En el documento profile.ps1, aadimos el siguiente fragmento de cdigo,para cargar el snapin Microsoft.Microsoft.SharePoint, en caso de que no

    est actualmente incluido:

    If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell

    -ErrorAction SilentlyContinue) -eq $null )

    { Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell }

    4. Guardamos el profile.ps1, y cerramos Windows PowerShell ISE.

    5. Abrimos nuevamente Windows PowerShell ISE, y lanzamos el siguientecmdlet para verificar que efectivamente, el snapin Microsoft.

    SharePoint.PowerShell est cargado:

    Get-Command Get-SP*

    4.PowerGUI

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    13/21

    www.solidq.comPowerGUI es una alternativa no oficial, pero libre, para desarrollar scripts en Windows

    PowerShell. Es una versin vitaminada del entorno Windows PowerShell ISE. Su principal

    atractivo, es que como su nombre indica (GUI: graphical user interface), es una

    herramienta grfica, que permite escribir scripts prcticamente a golpe de ratn. Cuenta con

    una gran comunidad aportando mdulos con scripts predefinidos para muchos sistemas

    (incluido SharePoint), y en general, es una herramienta muy completa como alternativa al

    Windows PowerShell ISE, siempre y cuando tengamos permitido en nuestro entorno instalar

    herramientas de terceros, lo cual no siempre es posible, y menos an, en entornos de

    produccin.

    7. Acceso remoto con Windows PowerShell

    Si bien lo frecuente sera lanzar los cmdlets o scripts de Windows PowerShell, desde el propio

    servidor donde tenemos instalado SharePoint, podra resultar interesante poder ejecutar dichos

    scripts o comandos remotamente, desde otra mquina. Desde Windows PowerShell 2.0

    tenemos acceso remoto, mediante WinRM (Windows Remote Management), un nuevo

    estndar de Microsoft para la administracin remota, que emplea HTTP o HTTPS en vez de RPC.

    No pretendo profundizar en los entresijos de dicha tecnologa, pero s ver cules son los pasos

    a seguir, para configurar un acceso remoto mediante Windows PowerShell, y as poder

    administrar un SharePoint 2013 o 2010, desde la comodidad del hogar (o donde se antoje). As

    pues, vamos a ir paso a paso, por la configuracin necesaria, primero en el servidor, o mquina

    objetivo (target que diran los ingleses), y a continuacin la configuracin necesaria en la

    mquina local. Es importante que los comandos y procedimientos que se relatan a continuacin,

    se ejecuten con una cuenta de usuario que tenga permisos de administrador.

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    14/21

    www.solidq.comConfiguracin en Servidor Remoto

    Habilitamos el acceso remoto en el servidor al que queremos acceder:

    Enable-PSRemoting

    Con este cmdletlo que conseguimos es iniciar el servicio WinRMy establecer el modo de inicio

    a automtico. Tambin aade una excepcin al firewall para las comunicaciones con el servicio

    WS-Management. Finalmente, se crea un listenerpara aceptar peticiones desde cualquier

    direccin IP. El resultado del comando anterior, ser similar a lo siguiente:

    WinRM Quick ConfigurationRunning command "Set-WSManQuickConfig" to enable this machine forremote management through WinRM service.This includes:

    1. Starting or restarting (if already started) the WinRM service

    2. Setting the WinRM service type to auto start3. Creating a listener to accept requests on any IP address4. Enabling firewall exception for WS-Management traffic (for http

    only).

    Do you want to continue?[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help(defaultis "Y"): yWinRM has been updated to receive requests.WinRM service type changed successfully.WinRM service started.Configured LocalAccountTokenFilterPolicy to grant administrativerights remotely to local users.WinRM has been updated for remote management.Created a WinRM listener on HTTP://* to accept WS-Man requests to anyIP on this machine.WinRM firewall exception enabled.

    Para verificar, que el acceso remoto est funcionando en el servidor, pruebe a lanzar el siguiente

    comando:

    Enter-PSSession localhost

    Si todo funciona correctamente, debera obtener por lnea de comandos algo tal que as:

    [localhost]: PS > C:\Users\Administrator\Documents>

    A continuacin, hacemos saber a la maquina servidora o mquina remota, cul va a ser su rol

    en la comunicacin que pretendemos establecer, entre nuestra mquina local y sta. Es decir,

    que va a actuar como servidor. Para ello lanzamos el siguiente cmdlet.

    Enable-WsmanCredSSP Role Server

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    15/21

    www.solidq.comFinalmente, vamos a configurar la opcin de WinrRM, MaxMemoryPerShellMB. Esta opcin

    limita la cantidad de memoria que puede usar un solo proceso remoto. Es conveniente modificar

    el valor por defecto (150MB), para permitir que los comandos de larga duracin se ejecuten sin

    generar excepciones del tipo OutOfMemory. Para ello lanzamos el siguiente comando:

    Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 1024

    Permisos necesarios para administrar SharePoint con Windows PowerShell

    Ahora que ya hemos configurado el servidor al que pretendemos acceder remotamente, el

    siguiente paso es configurar nuestra mquina local, la que pretende hacer de puente. Pero antes

    vamos a detenernos a comprobar si cumplimos los requisitos necesarios en cuanto a permisos

    y seguridad que SharePoint requiere. Es decir, obviamente, cualquier usuario no puede ejecutar

    comandos de PowerShell contra SharePoint, es necesaria una cuenta de usuario con una seriede permisos y roles muy concretos. stos son:

    Debe ser miembro del grupo de seguridad local WSS_ADM_WGPen el equipo que

    se ejecuta los comandos.

    Debe ser miembro del rol SharePoint_Shell_Access SQL Server en la base de datos

    de configuracin (SharePoint_Config).

    Debe tener acceso a la base de contenidos que desea manipular

    (WSS_Content_XXX).

    Adems, si la aplicacin web a la que queremos acceder mediante Windows PowerShell, est

    configurada con autenticacin basada en notificaciones (Claims Based Authenticacion), en vez

    de con autenticacin Windows, es necesario que la cuenta de usuario que se use para

    conectarse remotamente, sea tambin la cuenta de usuario que se usa para ejecutar el proceso

    de la application pooldel IIS.

    En caso de no cumplir alguna de estas restricciones, puede incluir manualmente al usuario en

    cuestin en los citados grupos de permisos. No obstante, existe un cmdletcuyo cometido es

    principalmente ese, otorgar permisos a un usuario para administrar SharePoint con WindowsPowerShell, aadiendo al usuario en los grupos necesarios. Se trata del cmdlet Add-

    SPShellAdmin:

    Add-SPShellAdmin UserName SP2013\User1

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    16/21

    www.solidq.comEl cmdletse encarga de aadir el usuario al rol SharePoint_Shell_Access , teniendo en cuenta lo

    siguiente:

    Si slo se indica el usuario como parmetro de entrada del comando, se agrega al rol

    nicamente de la base de datos de configuracin (SharePoint_Config).

    Usando el parmetro databasese agrega al usuario en el rol SharePoint_Shell_Access,

    en la base de datos de configuracin (SharePoint_Config), en la base de datos de la

    Administracin Central (SharePoint_AdminContent_XXX ), y en la base de datos de

    contenido especificada (WSS_Content_XXX). Es recomendable usar el parmetro

    database, ya que la gran mayora de operaciones administrativas requieren acceso a la

    base de datos de la Administracin Central.

    Adems, de manera automtica, el usuario se agrega al grupo WSS_Admin_WPG, en todos los

    servidores cuando se agrega al rol SharePoint_Shell_Access . Si la base de datos no tuviera dichorol creado, tambin se crear automticamente.

    Veamos un ejemplo de uso:

    Get-SPDatabase | Where-Object {$_.Name -eq "WSS_Content"} |

    Add-SPShellAdmin Username SP2013\User1

    Este ejemplo es interesante, ya que vemos como mediante el uso de pipelines, accedemos a

    todas las bases de datos de contenidos, filtramos entre ellas para obtener solo aquella cuyo

    nombre sea WSS_Content, y finalmente, le damos en esta base de datos permisos al usuario

    SP2013\User1, mediante Add-SPShellAdmin.

    Finalmente, si queremos comprobar qu usuarios tienen permisos para lanzar comandos de

    Windows PowerShell contra SharePoint, podemos hacer uso del cmdletGet-SPShellAdmin:

    Get-SPShellAdmin

    El cual devuelve un listado con todos aquellos usuarios que tienen el rol

    SharePoint_Shell_Access . Se debe especificar una base de datos en cuestin como parmetro

    de entrada mediantedatabase, para consultar sobre una nica base de datos. En caso de no

    especificar ningn valor, se consulta sobre la base de datos de configuracin.

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    17/21

    www.solidq.comConfiguracin en Cliente

    Quedan pocos pasos para terminar de configurar acceso remoto mediante Windows

    PowerShell, pero son tal vez los pasos ms complicados. Pero como dicen en una de mis pelculas

    favoritas, la noche es ms oscura, justo antes del amanecer7.

    En primer lugar, vamos a introducir el concepto de CredSSP (Credential Security Service

    Provider).Este es un concepto con el que ya hemos coqueteado anteriormente(sin saberlo),

    en la configuracin para el servidor. Resumidamente, CredSSPpermite a las aplicaciones delegar

    las credenciales de un usuario desde una mquina cliente, a una mquina objetivo, proceso

    que tambin se conoce como doble salto (double-hop). Esto permite presentar las credenciales

    a los cmdletsde SharePoint que se comunican con la mquina que tiene la instancia de Microsoft

    SQL Server. As pues, se podra comparar a CredSSPcon Kerberos, solo que el mecanismo de

    autenticacin de CredSSPes notoriamente distinto. En CredSSP, las directivas de grupo (Group

    Policy), establecen qu credenciales deben ser delegadas, y a continuacin se le pide al usuario

    que introduzca dichas credenciales mediante nombre de usuario y contrasea. Esto significa que

    el usuario tiene cierto control sobre si la delegacin debe ocurrir o no, y en caso de que sea as,

    qu credenciales deben usarse. En Kerberos, nicamente pueden delegarse las credenciales del

    usuario que proceden del Active Directory. Una vez autenticado el usuario, las credenciales no

    son delegadas hasta que el servidor objetivo es autenticado tambin mediante las directivas de

    grupo (Group Policy) de la mquina local.

    Y eso es precisamente lo que vamos a hacer a continuacin, editar las directivas de grupo usando

    gpedit.msc.

    7 http://www.filmaffinity.com/es/review/84024325.html

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    18/21

    www.solidq.comUna vez estemos en la seccin de la imagen anterior, habilitamos los siguientes:

    Allow Delegating Fresh Credentials.

    Allow Delegating Fresh Credentials with NTLM-only Server Authentication.

    En ambos, debemos hacer clic en el botn Show para aadir servidores a la lista.

    Como vemos se puede usar el carcter *, para hacer referencia a todas las mquinas bajo un

    determinado dominio. En el ejemplo de la imagen, estaramos otorgando permisos a todas los

    servidores que se encuentran en el dominio SP2013.local. Es importante, adems, que si la

    mquina localse encuentra fuera de dominio, sta conozca la ubicacin de la mquina destino

    (direccin IP), bien mediante DNS, o bien, mediante una entrada en el fichero host.

    Finalmente, para asegurarnos de que se apliquen los cambios, podemos actualizar lasdirectivas de grupo lanzando el siguiente comando:

    GPUpdate.exe

    Volvemos a la lnea de comandos de Windows PowerShell, y lanzamos el siguiente comando

    para habilitar el acceso remoto desde cliente:

    Enable-PSRemoting

    Y por ltimo, lanzamos el siguiente comando, donde especificamos que nuestra mquina local

    va a tener el rol de cliente en la comunicacin con el servidor, y adems, a qu mquina

    queremos conectarnos.

    Enable-WSManCredSSP Role Client DelegateComputer

    computerName.SP2013.local

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    19/21

    www.solidq.comBueno, ha sido largo el camino, pero finalmente ya estara configurado el acceso remoto. El

    ltimo paso, obviamente, es comprobar que todo funciona como se espera. Lanzamos el

    siguiente comando, que inicia una conexin remota:

    Enter-PSSesion ComputerName computerName.SP2013.local

    Authenticaton CredSSP Credential (Get-Credentials)

    Se nos pedir que introduzcamos los credenciales del usuario con el que iniciar la sesin

    remotamente. Y si obtenemos como resultado en lnea de comandos, algo similar a esto:

    [computerName.SP2013.local]: PS C\Users\UserName\Documents>

    Quiere decir que ya estamos accediendo remotamente al servidor mediante PowerShell. Una

    prueba de ello sera en primera lugar, cargar los snapins de SharePoint, y a continuacin lanzar

    un cmdletcomo por ejemplo, Get-SPSite, que muestra en un listado todas las colecciones de

    sitios que tenemos creadas en el servidor. Finalmente, para cerrar la sesin, tecleamos exit.

    8. Tu turno.

    Llegado a este punto, en el que ya hemos hablado largo y tendido de Windows PowerShell, es

    el momento en el que el lector debe sentarse delante de su PC y poner en prctica todo lo

    aprendido. Hemos visto qu es Windows PowerShell, cmo podemos sacarle el mejor partido,

    e incluso cmo podemos hacer uso de l remotamente. Slo queda que el lector,

    presumiblemente un desarrollador SharePoint, le d forma de script aesas tareas repetitivasque realiza frecuentemente.

    Ejemplo prctico.

    Una de esas tareas, por la cual se hace notorio la necesidad de realizar un scriptque permita

    automatizarla, es aquella que requiere de realizar cierta accin en todos los sub-sitios de una

    coleccin de sitios, o bien, en un gran nmero de ellos. Esto podra ser crear una lista en todos

    los sub-sitios, agregar un determinado elemento web en las pginas de bienvenida, activar

    alguna caracterstica de SharePoint, etc. Este tipo de scripts tienen en comn un esquema o

    patrn, y es que se ha dicho, se necesita recorrer todos los sitios y sub-sitios de una coleccinde sitios. Por lo que este script es fcilmente reutilizable, adaptando nicamente la accin o

    proceso a realizar.

    A continuacin, y a modo de ejemplo de lo visto en este artculo, y que a su vez, sirva como

    referencia para el modelo de scriptdescrito, vamos a mostrar cmo sera el cuerpo de dicho

    script que recorre todos los sitios y sub-sitios de una coleccin de sitios. La forma de hacerlo

    ser por medio de recursividad, de manera que en pocas lneas de cdigo, se puede iterar por

    toda la estructura de sitios de SharePoint.

    Vamos a ver el script.

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    20/21

  • 8/10/2019 Windows PowerShell Para Desarrolladores SharePoint Tu Nuevo Mejor Amigo. Por Cristian Zaragoza SolidQ

    21/21

    www.solidq.comEl resultado de ejecutar dicho script, dentro de la web de SolidQ, sera el siguiente.

    Se muestra por pantalla, cada uno de los sitios que componen la coleccin de sitios. Partiendo

    de dicho esquema, sera fcil realizar un script funcional, tan slo adaptndolo a segn qu

    necesidades. Obviamente, la mostrada sera la parte fcil. Quedara por parte del lector o

    usuario de SharePoint la tarea de averiguar cmo traducir a lenguaje de Windows PowerShell,

    aquellas tareas que sabe que pueden hacerse, pero todava no sabe cmo. Esa es sin duda la

    parte ms bonita del camino: encontrarle la solucin al problema. Y espero que este artculo,

    sea una pieza de esa solucin.

    9. Referencias.

    1. Blog del equipo de SharePoint de SolidQ,

    http://blogs.solidq.com/sharepoint

    2. Gary Lapointe,

    http://blog.falchionconsulting.com/

    3. Hey, Scripting Guy! Blog,

    http://blogs.technet.com/b/heyscriptingguy/

    http://blogs.solidq.com/sharepointhttp://blogs.solidq.com/sharepointhttp://blogs.technet.com/b/heyscriptingguy/http://blogs.technet.com/b/heyscriptingguy/http://blogs.technet.com/b/heyscriptingguy/http://blogs.solidq.com/sharepoint