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