PowerShell Polaris

PowerShell Polaris es un framework web, multi plataforma, que se ejecuta sobre PowerShell Core 6. Antes de seguir con los detalles de Polaris, quiero recalcar que un web framework es:

Es un entorno de trabajo diseñado para apoyar el desarrollo de aplicaciones web, incluyendo servicios y APIs.

O sea que vamos a tener a partir de nuestro querido PowerShell un web server reducido, pero que nos va a permitir hacer cosas muy divertidas.

Instalación

La instalación de PowerShell Polaris es bastante sencilla, simplemente hay cumplir con 2 requerimientos:

  • PowerShell Core 6
  • .NET Standard 2.0 SDK
  • Git (solo es necesario para clonar el repositorio, de lo contrario descargar el repositorio como .zip)

Y los pasos a seguir son:

git clone https://github.com/PowerShell/Polaris.git
  cd Polaris/PolarisCore

Parte del proceso de instalación de PowerShell Polaris

Posteriormente ejecutar para finalizar la instalación:

dotnet restore
  dotnet build
  cd ..
  Import-Module ./Polaris.psm1

Finalmente luego del arduo trabajo tenemos Polaris instalado en el equipo!

Primeros pasos

Al momento de comenzar a utilizar este framework no comprendía realmente el alcance del proyecto, por ello es que quiero mostrarles un ejemplo de uso para que puedan entenderlo mejor y sacarle provecho.

Lo primero que vamos a hacer es ver los cmdlets que vienen en el módulo ejecutando:

Get-Command -Module Polaris

Cmdlets de PowerShell Polaris

El primer cmdlet que vamos a utilizar para el ejemplo es New-WebRoute y nos permite definir una ruta HTTP en la que nuestro webserver va a escuchar. Simplemente para refrescar la memoria, gracias al protocolo HTTP podemos comunicarnos utilizando el esquema request-response en donde existen varios métodos de petición (GET, POST, PUT, etc.) para realizar acciones sobre el servidor.

Como parte del ejemplo, nos resta comentar que comando tenemos para iniciar el servidor. Para ello vamos a utilizar Start-Polaris. A modo de comentario vale la pena aclarar que el puerto por defecto del servidor es el 8080. En caso de querer definir un puerto diferente, debemos utilizar el parámetro Port.

Así que vamos a crear el “Hola Mundo!” en nuestro flamante servidor de la siguiente manera:

#Primero definimos la ruta con el método
  New-GetRoute -Path "/helloworld" -ScriptBlock {
    $response.Send('Hello World!');
  }
  #Iniciamos el server en el puerto 8081
  $app = Start-Polaris -Port 8081

Para comprobar lo que realizamos, accedemos desde un navegador a la siguiente dirección: http://localhost:8081/helloworld y vamos a poder ver lo siguiente:

Hello World en nuestro servidor!

En caso de querer finalizar el servidor, debemos ejecutar:

Stop-Polaris -ServerContext $app

Un ejemplo más funcional…

Ahora vamos a ver un ejemplo un poco más divertido, que nos demuestra el potencial de este proyecto. Al ser un webserver montado sobre PowerShell, tenemos a disposición para utilizar comandos que impacten sobre el resultado de la consulta (por ejemplo un GET), por lo que cada vez que realicemos la consulta obtendremos un valor actualizado.

La demostración más sencilla que se me ocurrió es consultar la hora, ya que es un valor que va cambiando constantemente. Así que vamos a construir lo siguiente:

New-GetRoute -Path "/time" -ScriptBlock {
    $time = Get-Date -DisplayHint Time
    $response.Send("Que hora es?: $time");
  }

Posteriormente iniciamos la instancia:

$app = Start-Polaris -Port 8088

Y luego consultamos el resultado, ya sea desde la web (accediendo a la URL con el puerto y la ruta) o utilizando el cmdlet Invoke-RestMethod, de la siguiente manera:

Invoke-RestMethod -Uri http://localhost:8088/time -Method GET

Invoke-RestMethod

En donde vamos a obtener resultados actualizados, en función de lo definido en la ruta.

Happy scripting!

Comments