Como saber que servicios tienen los servidores de una granja de SharePoint 2010 / 2013 con PowerShell

NOTA: Los comandos están probado en la versión SharePoint 2013 Preview.

Imaginemos la siguiente situación: Tenemos 10 servidores en nuestra granja, y queremos asegurarnos que tenemos balanceado el servicio de user profiles. O que queremos saber que servidores tienen el rol de frontales. O simplemente saber si tenemos algún servicio que no ha sido completamente iniciado.

Por supuesto que tenemos la opción, "Services on server" o "Servicios en Servidor" desde nuestra Administración Central. Esta opción viene bien cuando estamos hablando de uno o dos servidores, pero cuando hablamos de varios, esto se puede volver tedioso. Es aquí donde PowerShell sale en nuestra ayuda y permite una versatilidad que usando una interfaz gráfica no puede en estos casos. Pues eso, vamos al lío.

Primero, iniciar la consola de administración de PowerShell para SharePoint (No olvidar ejecutar como administrador) desde Inicio > Productos de Microsoft SharePoint > Consola de Administración de SharePoint

  Get-SPServiceInstance 

El resultado será algo como esto:

Que por supuesto, tiene poca alegría. Básicamente tenemos el listado plano de todos los servicios, pero no vemos a que servidor está. Así que podemos ampliar el comando:

  Get-SPServiceInstance | Select TypeName, Status, Server

Y tendremos así, el siguiente resultado

Esto ya empieza a tener un poco mas forma, pero si queremos ser un poco mas exigente, podemos agrupar este listado, y darle una forma más de reporte, ejecutando el mismo comando con la siguiente modificación:

  Get-SPServiceInstance | Select TypeName, Status, Server | ft -GroupBy 
 Server

Y como resultado, tendríamos

Ya casi estamos, por que podríamos sólo seleccionar los servicios que estén online, para que nuestro reporte sea mas fácil de leer, para ello aplicamos el siguiente filtro:

  Get-SPServiceInstance | ? {$_.Status -like "Online"} | 
 Select TypeName, Status, Server | ft -GroupBy Server

Entonces, el resultado sería:

  

Finalmente, para ver el nombre completo del servicio, afinamos el comando de la siguiente forma:

  Get-SPServiceInstance | ? {$_.Status -like "Online"} | 
 Select TypeName, Status, Server | ft -GroupBy Server -AutoSize

Y el resultado del comando, tendríamos:

Y esto ya podríamos enviarlo a un fichero de texto, direccionando el resultado del comando de la siguiente forma:

  Get-SPServiceInstance | ? {$_.Status -like "Online"} | 
 Select TypeName, Status, Server | ft -GroupBy Server -AutoSize > Resultado.txt

 Como lectura complementaria, os recomiendo:

Administrar Servicios en el Servidor: https://technet.microsoft.com/es-es/library/ee704549.aspx

Comando Get-SPServiceInstance: https://technet.microsoft.com/es-es/library/ff607570.aspx

Comando Format-Table de PowerShell: https://technet.microsoft.com/es-es/library/dd347677.aspx