PowerShell Básico: una alternativa para la línea de comandos en Linux y Mac

La Interfaz de Línea de Comando (abreviado en inglés como CLI) en Windows® existe y resiste el paso del tiempo, desde aquellos días lejanos del MS-DOS® hasta el actual PowerShell® que os presentamos hoy. Veamos el PowerShell básico.

Cuando entré en la universidad en la década los 80 el software privativo reinaba. Los viejos ordenadores alemanes con Unix® que imprimían nuestros horarios estaban siendo sustituidos por “modernas” computadoras personales. La casa de software Microsoft® -en aquel tiempo- estaba atada al MS-DOS®, así que aprendimos a usar los comandos: dir, cls, format para nuestros discos flexibles…

Hará poco más de una década, allá en Redmond se decidieron por desempolvar, modernizar y empoderar la CLI. Nacida como Monad®, rebautizada como PowerShell®, hoy os presentamos el PowerShell básico o PowerShell 101. Notad que el símbolo de marca registrada abundará; casi todas pertenecen a Microsoft®. Si olvido colocar alguna dejad vuestro comentario abajo.

powershell básico

Leyenda: PowerShell básico – logotipo Wikipedia https://commons.wikimedia.org/wiki/File:PowerShell_5.0_icon.png

PowerShell básico

De unos años para aquí el sistema operativo Linux ha venido pisando fuerte; son muchos los artículos en el blog de Pandora FMS acerca de ello. También en la monitorización de sistemas privativos estamos siempre presentes; Windows®, como su máximo exponente. Y cada vez que sale una versión nueva estamos allí, probando y comprobando.

Opino que, debido a esto de Linux, Microsoft se decidió por realizar una compilación de herramientas junto con nuevos conceptos, como una contraparte a las funcionalidades del GNU que vienen con Linux. Tomando en cuenta que existe el PowerShell Core desde 2016 como software abierto (licencia del MIT) pero con componentes propietarios de Windows®, ahora lo tenemos disponible en Ubuntu, CentOS (el SO recomendado para Pandora FMS) y macOS y hasta en otra arquitectura de hardware como lo es ARM.

Installing PowerShell Core en Linux

Debianita empedernido como soy, en Ubuntu debemos instalar el gestor de paquetes snap: con sudo apt install snap lograremos nuestro cometido. A continuación ejecutaremos snap install powershell –classic

powershell básico 2

Leyenda: snap install powershell –classic

Primeros comandos

Al haber lanzado con el comando pwsh (en Windows® deberemos buscar powershell.exe), tendremos una ventana terminal, con «PS» de indicativo (prompt) seguido de la ubicación de directorio. En ambos ambientes es muy parecido el aspecto, así que generalizaremos de ahora en adelante.

Entonces pongamos en práctica nuestra memoria:

  • cls: «borra» la pantalla, dejando espacio para ejecutar un nuevo ciclo de comandos. No es para nada necesario, pero tiene semejanza a cuando uno escribía con gis en una pizarra y borraba para comenzar a explicar otro tema.
  • dir -ad: para listar directorios solamente.
  • echo mensaje: cuando queremos mostrar texto específico por pantalla. Esto pareciera no tener utilidad, pero cuando lo integramos en un guion o script es de tremenda utilidad para indicar el progreso de alguna tarea o el resultado de la misma.

No nos dilataremos más con los viejos comandos del MS-DOS. Faltaría más que en pleno siglo XXI siguiéramos usando tecnología tan antigua, y de paso con esos vetustos programas que comunicaban o interactuaban con cadenas de texto (STDIN, STDOUT).

Command-let en PowerShell básico

En el siglo XXI todo es más complejo, son años de experiencia acumulada. PowerShell no es una simple herramienta como la que usamos en Linux, no. Para esta herramienta existen los command-let y se abrevia su nombre como cmdlet (aunque igual se pronuncia completo). Eso quiere decir que los comandos que probamos no son en realidad los que creímos: son alias de los cmdlet que vienen por defecto y esto permite la retrocompatibilidad. Ahora bien, hay más. Analicemos el caso del comando date, utilizado para retribuir la fecha.

Su verdadero nombre es Get-Date y aunque devuelve en un formato ligeramente diferente la fecha y hora actual a la del alias, básicamente ambos hacen lo mismo. Supongamos que para labores de monitorización necesitamos entregar dicho valor en un formato muy específico: aquí es cuando los cmdlets cumplen con su labor de una forma totalmente diferente.

powershell básico 3

Leyenda: Trabajando con cmdlet con variables de fecha y hora

Con el cmdlet Get-Date podremos:

  • Mostrar la fecha del ordenador.
  • Mostrarlo en un formato personalizado.
  • Utilizar métodos; en este caso visualizamos qué número de día es la fecha 20 de mayo de 2019 (es el día número 140 del año).
  • Guardar una variable fecha en un formato personalizado.
  • Convertir dicha variable a una cadena de texto y guardarla en un fichero.
  • Observad que hemos utilizado la pleca para comunicar un cmdlet con otro. El cmdlet que recibe utilizado para escribir a disco se llama Add-Content. (¿A que os acordáis de Linux?).

El contraparte de lectura es Get-Content y su alias es llamado… «cat», ¡tal como el utilizado en Linux para listar el contenido de un fichero de texto!

Coged pausa, repasad antes de pasar al siguiente punto.

Trabajando con cmdlet

Teniendo ya todo esto como base, podemos dejar de pensar en Powershell básico como una herramienta y comenzar a evocarlo como una caja de herramientas. Para ello utilizaremos el comando Get-Command:

  • Al usarlo sin ningún parámetro nos devolverá una gran cantidad de herramientas; las que tengamos instaladas en nuestro equipo.
  • Si inquirimos sobre un comando en particular, por ejemplo Get-Command Get-Date devolverá información sobre el tipo de comando, nombre, versión y fuente (librería a la que pertenece). Para Get-Date indicará que es un cmdlet perteneciente a Microsoft.PowerShell.Utility y para Clear-Host (limpiar pantalla, cls) que simplemente es una función. Si introducimos un alias nos devolverá el cmdlet o función original.
  • Si no recordamos exactamente el nombre utilizaremos comodines; por ejemplo, con Get-Command *date* obtendremos un listado de todos los comandos que contengan esa cadena de caracteres.

Ayuda con Powershell básico

La ayuda fue pensada, además, como un repositorio, ya que con el comando Get-Help también podremos descargar contenido a nuestro ordenador:

  • Get-Help Get-Date: mostrará información completa acerca de cómo utilizar Get-Date, su sintaxis, sus alias, etc.
  • Get-Help Get-Date -Online: abrirá una instancia de nuestro navegador web y abrirá la última información en línea acerca del comando Get-Date.
  • Para trabajar fuera de línea, o sea guardar la ayuda actualizada: Update-Help.

Os dejo, para vuestra curiosidad, utilizando Get-Help, en qué consisten los comandos Get-Location y Set-Location.
Supongamos que debamos crear una carpeta o un fichero; para ello ya no volveremos a utilizar el comando md o mkdir (este último se escribe exactamente igual en Linux) sino que usaremos el comando New-Item:

New-Item “ruta/nombre” -type directory

  • Comando New-item.
  • «ruta/nombre» del directorio; las comillas son necesarias cuando lleva espacios intercalados.
  • Parámetro -type y a continuación lo que tengamos instalado como provider: File, Directory, SymbolicLink, Junction o HardLink

Ahora llegamos al tema de los providers: podremos descargar los proveedores que necesitamos o podremos crear nuestros propios proveedores y asociarlos al comando. Mi imaginación vuela: desarrollamos un programa que actúe como cliente FTP y lo ofrecemos como provider y así lo podremos vender a cualquiera para que lo integre a su PowerShell… pero esperen, aún hay más. Si hacemos esto a su vez -si nuestra licencia de uso lo permite- nuestro cliente puede agregar nuestro programa FTP como librería a sus propios proyectos. ¿Qué os parece?

Nota: PowerShell también es capaz de funcionar por medio de API e incluso los analistas de seguridad han creado sus propios entornos PowerShell, algunos mezclados con lenguaje Python… ¡que ni siquiera necesitan de los ficheros ejecutables de Microsoft!

Pandora FMS y las labores de monitorización

La flexibilidad de Pandora FMS nos permite hacer uso de PowerShell para acceder rápidamente a comandos complejos. Por ejemplo, en ambiente Windows necesitamos saber cuáles son los parches instalados:

Get-CimInstance -ClassName Win32_QuickFixEngineering -ComputerName .

Podremos visualizar los componentes con el comando Get-Member, extraer los contenidos ¡y realizar nuestro complemento en Pandora FMS para PowerShell!

¿Quieres conocer mejor qué es lo que Pandora FMS puede ofrecerte? Descúbrelo entrando aquí.

Si cuentas con más de 100 dispositivos para monitorizar puedes contactar con el equipo de Pandora FMS a través del siguiente formulario.

Además, recuerda que si tus necesidades de monitorización son más limitadas tienes a tu disposición la versión OpenSource de Pandora FMS. Encuentra más información aquí.

Shares