Escenarios de uso de PowerShell para SharePoint

Escrito por Juan Carlos Gonzalez Martin - 31/10/2015

En este artículo haremos un repaso por los que en mi opinión son algunos de los escenarios típicos de uso de PowerShell para SharePoint más allá de la Administración y Configuración de la Plataforma. En concreto, 6 son los escenarios de uso de PowerShell de los qué suelo hablar en las conferencias en las que participo:

·       Instalación y Configuración de la Granja de SharePoint.

·       Administración de la Plataforma.

·       Migración entre versiones OnPremises de SharePoint.

·       Auditoría de Granjas SharePoint.

·       Troubleshooting de plataforma.

·       Despliegue de Soluciones.

A continuación, se detallarán cada uno de estos escenarios junto con un ejemplo práctico de uso de PowerShell aplicado a cada escenario concreto.

Instalación y Configuración de la Granja de SharePoint

El proceso de instalación y configuración (completo o partes del mismo) de una granja de SharePoint se puede realizar por medio de PowerShell proporcionando las siguientes ventajas con respecto a realizar una instalación completamente visual:

·       Se obtiene un mayor control del proceso de instalación en aspectos como definición de las cuentas de instalación, especificar nombres adecuados para las Bases de Datos (BDs) de Contenidos, configuraciones específicas de Servicios y Aplicaciones de Servicios, etc.

·       Se asegura que todos los servidores de la granja tienen la misma configuración haciendo uso del mismo conjunto de Scripts PowerShell para cada nuevo servidor añadido.

·       Facilita la recuperación ante desastres en el caso en el que haya problemas en la granja que conlleven tener que levantar un nuevo servidor que tenga las mismas configuraciones que el servidor que pueda estar dando problemas.

Como ejemplo de este escenario, el siguiente Script demuestra cómo crear una nueva ruta administrada en una Aplicación Web de una Granja de SharePoint:

·       Añadir una nueva ruta administrada a una Aplicación Web de manera que se pueda utilizar para crear Colecciones de Sitios que requieran rutas administradas específicas. El siguiente Script demuestra cómo crear una nueva ruta administrada para SharePoint:

If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell
-ErrorAction SilentlyContinue)
-eq $null
) 
{ Add-PSSnapIn
-Name Microsoft.SharePoint.PowerShell
}
 
$host.Runspace.ThreadOptions
= "ReuseThread"
 
#Definición
de la función que crea una ruta administrada
function Create-SPManagedPath
{
    param ($sManagedPathName,
$sWebApplicationIdentity)
    try
    {
        #Verificamos
en primer lugar si existe la ruta administrada a crear
        $spManagedPath=Get-SPManagedPath -WebApplication
$sWebApplicationIdentity -Identity $sManagedPathName
-ErrorAction SilentlyContinue
        
        if ($spManagedPath -ne
$null)
        {
            Write-Host
"La ruta administrada $sManagedPathName ya
existe en la aplicación web"
            Remove-SPManagedPath -Identity $sManagedPathName
-WebApplication $sWebApplicationIdentity
–Confirm:$false
            Write-Host "Se ha eliminado la ruta administrada $sManagedPathName"
        }    
        New-SPManagedPath
–RelativeURL $sManagedPathName
-WebApplication $sWebApplicationIdentity
        Write-Host "La ruta
administrada $sManagedPathName ha sido creada correctamente" -ForegroundColor Green  
    }
    catch [System.Exception]
    {
        Write-Host
-ForegroundColor Red
$_.Exception.ToString()
    }
}
 
Start-SPAssignment –Global
#Parámetros
requeridos
$sWebApplicationIdentity="<Url_Aplicacion_Web>"
$sManagedPathName="<Nombre_Ruta_Administrada>"
#Llamada
a la función
Create-SPManagedPath -sManagedPathName
$sManagedPathName -sWebApplicationIdentity
$sWebApplicationIdentity
Stop-SPAssignment –Global
 
Remove-PsSnapin Microsoft.SharePoint.PowerShell 
La función Create-SPManagedPath se encarga de crear una nueva ruta administrada en un Aplicación específica utilizando para ello el cmdlet Get-SPManagedPath que permite comprobar si la ruta a crear existe, en cuyo caso es eliminada por medio del cmdlet Remove-SPManagedPath. A continuación, la ruta se crea haciendo uso del cmdlet New-SPManagedPath y los parámetros que identifican la ruta (RelativeURL) y la Aplicación Web (WebApplication) dónde se tiene que crear. Como resultado de la ejecución del Script se muestra por pantalla los mensajes correspondientes al borrado de la ruta administrada si esta existía e información de que se ha creado correctamente.
Imagen 1.- Creación de la nueva ruta administrada en la Aplicación Web. 

Administración de la Plataforma

Las posibilidades que proporciona PowerShell para realizar tareas de administración de una Granja de SharePoint son mayores que las disponibles a través de la Administración Central de la plataforma. De hecho, ciertas funciones administrativas únicamente pueden realizarse por medio de PowerShell. Por ejemplo, la Administración Central no ofrece un mecanismo para cambiar la frase de contraseña que se especifica durante el proceso de instalación de SharePoint. En cambio, la frase se puede cambiar mediante PowerShell de acuerdo al siguiente Script:

If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell
-ErrorAction SilentlyContinue)
-eq $null
) 
{ Add-PSSnapIn
-Name Microsoft.SharePoint.PowerShell
}
 
$host.Runspace.ThreadOptions
= "ReuseThread"
 
#Función
que permite cambiar la frase de contraseña de la Granja
function Change-SPPassPhrase
    param ($sPassPhrase)
    try
    {
        Write-Host
"Cambiando la Frase de Contraseña de la Granja
a $sPasPhrase"
        $SPPpassPhrase = ConvertTo-SecureString
–String $sPassPhrase
-AsPlainText –Force
        Set-SPPassPhrase
-PassPhrase $SPPpassPhrase
-Confirm:$true
    }
    catch [System.Exception]
    {
        Write-Host
-ForegroundColor Red
$_.Exception.ToString()
    }
}
 
Start-SPAssignment –Global
$spPassPhrase="<password> $sPassPhrase"
Change-SPPassPhrase -sPassPhrase $spPassPhrase
Stop-SPAssignment –Global
 
Remove-PsSnapin Microsoft.SharePoint.PowerShell 

Migración entre versiones OnPremises de SharePoint

Desde la versión 2010 de SharePoint, la realización de migraciones de plataforma ya sea entre distintas versiones de SharePoint (por ejemplo, actualizar desde SharePoint 2010 a SharePoint 2013) o en la misma versión (porque se requiere mover BDs de Contenidos desde la granja actual a una nueva granja) es un proceso que se ha beneficiado de PowerShell como tecnología que permite agilizar la realización de dichos procesos de migración a través del uso de cmdlets específicos y de poder paralelizar tareas. A modo de ejemplo, el siguiente Script PowerShell demuestra cómo ejecutar el cmdlet Test-SPContentDatabase en todas las BDs de Contenidos de una granja de SharePoint:

If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell
-ErrorAction SilentlyContinue)
-eq $null
) 
{ Add-PSSnapIn
-Name Microsoft.SharePoint.PowerShell
}
 
$host.Runspace.ThreadOptions
= "ReuseThread"
 
#Función
que permite ejecutar Test-SPContentDatabase contra todas las BDs de Contenidos
de una Granja SharePoint
function Execute-TestContentDatabase
    param ($sServerInstance)
    try
    {
        $spWebApps
= Get-SPWebApplication
-IncludeCentralAdministration
        foreach($spWebApp in
$spWebApps) 
        { 
            $spContentDatabases
= $spWebApp.ContentDatabases
            foreach($spContentDatabase in
$spContentDatabases) 
            {
                Write-Host
"Ejecutando Test-SPContentDatabase en la BD
" $spContentDatabase.Name -ForegroundColor
Green
                Test-SPContentDatabase
–Name $spContentDatabase.Name -ServerInstance
$sServerInstance -WebApplication
$spWebApp.Url
                Write-Host
"Test-SPContentDatabase ejecutado en la BD
" $spContentDatabase.Name -ForegroundColor
Green
            } 
        } 
    }
    catch [System.Exception]
    {
        write-host
-ForegroundColor Red
$_.Exception.ToString()
    }
}
 
Start-SPAssignment –Global
$sServiceInstance="c7370309033"
Execute-TestContentDatabase -sServerInstance
$sServiceInstance
Stop-SPAssignment –Global
Remove-PsSnapin Microsoft.SharePoint.PowerShell 

La función Execute-TestContentDatabase utiliza en primer lugar el cmdlet Get-SPWebApplication para obtener todas las Aplicaciones Web de la Granja incluyendo la Administración Central. A continuación, por cada Aplicación Web de la Granja se obtienen las BDs de Contenidos mediante la propiedad ContentDatabases (de tipo SPContentDatabaseCollection) de SPWebApplication. Por cada BD de Contendidos se procede a ejecutar el cmdlet Test-SPContentDatabase. Como resultado de la ejecución del Script, se mostrarán los errores encontrados (si los hay) al ejecutar el comando en cada BD de Contenidos.

Imagen 2.- Resultado de la ejecución de Test-SPContentDatabase contra todas las BDs de Contenidos de la Granja. 

Auditoría de Granjas SharePoint

Cuando se habla de auditar una plataforma específica como SharePoint, se trata de evaluar la misma en aspectos como uso de la plataforma, configuración y dimensionamiento, rendimiento, buenas prácticas o extensibilidad mediante desarrollo. En una granja de SharePoint, todos estos aspectos a evaluar se pueden agrupar en distintos ámbitos de diagnóstico como, por ejemplo, los siguientes:

·       Diagnóstico desde la perspectiva de uso de la plataforma que permite determinar la arquitectura de información de cada despliegue SharePoint concreto, así como el uso que se está realizando del mismo.

·       Diagnóstico desde la perspectiva de configuración de la plataforma encaminado a detectar posibles problemas en la plataforma a nivel de configuración, rendimiento, errores que se estén produciendo, etc. También se trata de determinar cualquier mala práctica en la que se haya incurrido.

·       Diagnóstico de soluciones desplegadas orientado a analizar los componentes personalizados desplegados (Soluciones y Aplicaciones) en la Granja de SharePoint con el objetivo de detectar cualquier problema o mala práctica que los mismos hayan podido introducir: rendimiento, seguridad, antipatrones, etc.

Aunque existen herramientas especializadas para facilitar el auditado de una Granja de SharePoint y obtener información para los ámbitos de diagnóstico identificados, PowerShell es también una excelente herramienta para poder obtener información de distintos aspectos de la Granja como demuestran los ejemplos prácticos que se describen en las siguientes secciones.

Como ejemplo de este escenario, el siguiente Script PowerShell muestra cómo obtener el tamaño en disco (en GB) de todas las BDs de Contenidos de una Granja SharePoint:

If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell
-ErrorAction SilentlyContinue)
-eq $null
) 
{ Add-PSSnapIn
-Name Microsoft.SharePoint.PowerShell
}
 
$host.Runspace.ThreadOptions
= "ReuseThread"
 
#Función
que obtiene el tamaño de todas las BDs de Contenidos de la Granja
function Get-ContentDBSizes
    try
    {
        $spWebApps
= Get-SPWebApplication
-IncludeCentralAdministration
        foreach($spWebApp in
$spWebApps) 
        {             
            $ContentDatabases
= $spWebApp.ContentDatabases
            foreach($ContentDatabase in
$ContentDatabases) 
            {     
                $ContentDatabaseSize
= [Math]::Round(($ContentDatabase.DiskSizeRequired/1GB),2)
                $ContentDatabaseInfo= $spWebApp.DisplayName +
"," +
$ContentDatabase.Name
+ ","
+ $ContentDatabaseSize
+ "
GB" 
                $ContentDatabaseInfo                
            } 
        } 
    }
    catch [System.Exception]
    {
        write-host
-f red $_.Exception.ToString()
    }
}
Start-SPAssignment –Global
Get-ContentDBSizes > ContentDBs.csv
Stop-SPAssignment –Global
Remove-PsSnapin Microsoft.SharePoint.PowerShell 

El Script permite obtener el tamaño de todas las BDs de Contenidos de la Granja por medio de la función Get-ContentDBSizes que utiliza por un lado el cmdlet Get-SPWebApplication para obtener la colección de Aplicaciones Web de la Granja incluyendo la Administración Central y por otro, para cada Aplicación Web se obtiene la colección de BDs de Contenidos a través de la propiedad ContentDatabases (de tipo SPContentDatabaseCollection) del objeto SPWebApplication. A continuación, para cada BD de Contenido se accede a la propiedad DiskSizeRequired para calcular el espacio ocupado en disco por la BD en cuestión. Como resultado de la ejecución del Script se obtiene para un archivo .csv con la información relativa al espacio ocupado por cada una de las BDs de Contenidos asociada a cada Aplicación Web de la granja.

Imagen 3.- Resultado de la ejecución del Script que obtiene los tamaños de las BDs de Contenidos.

Troubleshooting de plataforma

La gestión de problemas y errores de SharePoint se puede realizar por medio de PowerShell a través de cmdlets específicos y el uso de la API de SharePoint que permiten realizar acciones como, por ejemplo:

·       Interactuar con los archivos de LOG de SharePoint por medio de los comandos específicos que forman parte del Snap-In de PowerShell para SharePoint.

·       Habilitar / Deshabilitar la utilidad Panel del Desarrollador que permite identificar en tiempo real posibles problemas en páginas de SharePoint mostrando información relativa al tiempo necesario para realizar una petición al servidor, la pila de llamadas que se está realizando a nivel de API, posibles problemas de rendimiento, etc.

·       Modificar los archivos web.config en los entornos de desarrollo para habilitar que se muestren los detalles de los errores que se puedan producir en componentes que estén siendo desarrollados o que hayan sido desarrollados por terceros.

·       Etc.

Por ejemplo, el cmdlet Get-SPLogLevel se puede configurar fácilmente para obtener las entradas de los archivos de LOG correspondientes a eventos del buscador (Área Search) comprendidas entre una fecha de inicio y una de fin, basta con ejecutar en la Consola de Administración de SharePoint o en Visual Studio / PowerShell ISE la siguiente secuencia de instrucciones PowerShell:

$spLogEvents=Get-SPLogEvent -StartTime "10/18/2015" -EndTime "10/21/2015" | Where {$_.Area -Like "Search"}
$spLogEvents.Count
$spLogEvents

La salida por pantalla correspondiente muestra cómo se han encontrado más de 600 registros del Área Search en el intervalo de fechas especificado con los parámetros StartTime y EndTime de Get-SPLogEvent.

 

Despliegue de Soluciones

Por un lado, dentro del juego de cmdlets para SharePoint se dispone de comandos específicos para instalar y desplegar Soluciones (WSPs) y Aplicaciones en la granja, así como para gestionar el ciclo de vida de las características (Features) contenidas en las Soluciones y Aplicaciones que se hayan desplegado. Por otro lado, por medio del uso de algunos de los cmdlets que se han visto en este manual y de la API de SharePoint se pueden realizar tareas que tienen que ver no sólo con el proceso de despliegue de las soluciones en sí, sino con la creación de elementos de SharePoint necesarios para su correcto funcionamiento:

·       Para y re-iniciar el servicio de temporizador cuando se está desplegando soluciones WSP.

·       Crear elementos como Colecciones de Sitios, Sitios, Listas y Bibliotecas que se necesitan en las soluciones.

·       Una vez se han activado las características que forman parte de la solución o Aplicación, realizar acciones de post-despliegue que se puedan requerir como por ejemplo aplicar de forma recursiva en una estructura de sitios y subsitios los distintos elementos que se han provisionado en la granja como parte de una solución de cambio de aspecto de sitios SharePoint.

·       Etc.

Por ejemplo, para enumerar todas las Características únicas de todos los Sitios de una Colección de Sitios, basta con ejecutar las siguientes sentencias PowerShell que hace uso de los cmdlets Get-SPSite, Get-SPWeb y Get-SPFeature para volcar el listado de Características en un archivo .csv

$sSiteCollectionUrl="http://<Url_Coleccion_Sitios>/" $spSitesFeatures=Get-SPSite -Identity $sSiteCollectionUrl | Get-SPWeb –Limit ALL |%{ Get-SPFeature –Web $_ } | Select DisplayName,ID -Unique
$spSitesFeatures.Count
$spSiteFeatures > SitesFeatures.csv

 

Conclusiones

Como se ha visto a lo largo del artículo, PowerShell para SharePoint va más allá de la simple administración y configuración de la plataforma, habilitando escenarios de uso que facilitan el trabajo de todos los que nos dedicamos en nuestro día a día a realizar distintos tipos de tareas con SharePoint: auditado de la granja, realizar migraciones de plataforma, identificar y detectar problemas y desplegar soluciones que extienden a la plataforma. Si estás interesado en ver más ejemplos prácticos sobre las posibilidades de PowerShell para SharePoint, estate atento al sitio web de CompartiMOSS y a nuestros canales sociales puesto que en breve publicaremos la segunda guía de la serie sobre PowerShell para SharePoint.

 

Juan Carlos González Martín
Office Servers and Services MVP
Cloud & Productivity Advisor en MVP CLUSTER
jcgonzalezmartin1978@hotmail.com
@jcgm1978 | https://jcgonzalezmartin.wordpress.com/​​

***