Mostrar conexión a vSphere en el prompt de PowerShell

Algo que me ocurre habitualmente cuando estoy trabajando es que acabo con varias consolas de PowerShell abiertas a la vez y al final me cuesta distinguir desde qué terminal estoy conectado a algún servidor vCenter y aún más determinar contra cuál estoy conectado. En la breve entrada de hoy os enseñaré cómo mostrar la conexión a vSphere en el prompt de PowerShell, que es como he solucionado este problema.

Mostrar conexión a vSphere en el prompt de PowerShell

Determinando a qué servidor estamos conectados

Antes de ponernos a personalizar el prompt de nuestra consola necesitamos saber contra qué servidor o servidores estamos conectados. Para hacerlo podemos valernos de la siguiente variable global que se asigna una vez nos conectamos a algún servidor vSphere: $global:DefaultVIServers. Lo bueno de $global:DefaultVIServers es que nos refleja si estamos conectados a un servidor, a múltiples servidores o no estamos conectados a ninguno. Veamos como se comporta:

Conectado a un servidor:

PowerCLI un servidor

Conectado a dos servidores:

PowerCLI dos servidores

Sin servidores conectados:

Sin conexiones PowerCLI


Mostrando la conexión a vSphere en el prompt de PowerShell

Ahora que ya tenemos claro dónde ir a buscar nuestra conexión de PowerCLI podemos pasar a modificar nuestro prompt.

Como vimos en la entrada Cómo personalizar nuestro perfil de PowerShell para hacer dicha modificación necesitamos crear una función especial llamada prompt. La función prompt es llamada cada vez que se muestra una nueva línea, por lo que después de cada comando se refrescará el estado de nuestro prompt. Vamos a ver cómo quedaría:

function prompt { 
    if ($global:DefaultVIServers) { 
        Write-Host "[PowerCLI: $(($global:DefaultVIServers.Name) -join (', '))] " -ForegroundColor DarkGreen -NoNewline 
        "PS $pwd>" 
    } 
    else { 
        "PS $pwd>" 
    } 
}

Vamos a diseccionar la función

  • Línea 2: Determinamos si existe contenido dentro de $global:DefaultVIServers.
    • 3:
      • Write-Host “[PowerCLI: Mostramos [PowerCLI al principio del prompt.
      • $(($global:DefaultVIServers.Name) -join (‘, ‘)): Juntamos los posibles nombres de los servidores vSphere y los separamos por comas.
      • -ForegroundColor DarkGreen -NoNewline: Cambiamos el color de la letra a DarkGreen e impedimos que se cree una nueva línea.
    • 4: Añadimos PS y el path donde estamos ubicados (el prompt clásico de PowerShell).
  • 6-8: En caso de que no exista contenido en $global:DefaultVIServers volvemos a establecer el prompt clásico de PowerShell (ésto es útil para restablecer el prompt al desconectar de un servidor).

¿Cuál sería el resultado de esto? Ahí va:

Prompt PowerShell servidor PowerCLI

Ahora con un simple vistazo podremos determinar si estamos conectados a algún servidor vSphere y saber concretamente a cual.

Bola extra: Mostrando la conexión a vSphere en el título de PowerShell

Además de mostrar la conexión a vSphere en el prompt de PowerShell podemos hacer lo propio en el título de nuestra ventana de terminal. Éste cambio podemos incorporarlo también a nuestra función prompt para que se refresque en cada nueva línea:

function prompt { 
    if ($global:DefaultVIServers) { 
        $host.ui.RawUI.WindowTitle = "PowerCLI: $(($global:DefaultVIServers.Name) -join (', '))" 
        Write-Host "[PowerCLI: $(($global:DefaultVIServers.Name) -join (', '))] " -ForegroundColor DarkGreen -NoNewline 
        "PS $pwd>" 
    } 
    else { 
        $host.ui.RawUI.WindowTitle = "Windows PowerShell" 
        "PS $pwd>" 
    } 
}

Como podemos ver simplemente hemos modificado dos líneas:

  • 3: Mostramos el mismo contenido que en nuestro prompt en el título de la terminal en el caso de que exista contenido en $global:DefaultVIServers.
  • 8: De no existir contenido en $global:DefaultVIServers mostramos el título clásico de PowerShell.

Y el resultado sería el siguiente:

Título PowerShell servidor PowerCLI

Conclusión

Con esto ya estaría todo, lo único que nos faltaría sería añadir el contenido de esta función a nuestro perfil de PowerShell para que éstas configuraciones apliquen en cada nueva ventana de terminal que abramos.

¡Espero que os haya sido útil!

Deja un comentario