Hace ya mucho tiempo que tenía interés en adentrarme en PowerShell. Pero ¿que es PowerShell?. PowerShell es un intérprete de comados, una shell, una interfaz de la línea de comandos, con la que indicar a tu sistema operativo que es lo que tiene que hacer y como lo tiene que hacer. Y la forma de indicar a tu sistema operativo que es lo que tiene que hacer, es mediante líneas de texto, mediante instrucciones de texto.
Porque utilizar una shell de línea de comandos en lugar de una interfaz gráfica? Básicamente por productividad, y esto viene ratificado por dos razones. Por un lado, porque una sola línea de comandos puede ser suficiente para indicar exactamente todo lo que quieres hacer. Por otro lado, por la automatización con scripts. Puedes escribir esa línea de comando, o varias, en un archivo para ejecutarlo posteriormente, tantas veces como necesites.
Esto de escribir tu comando, o comandos en un archivo, es lo que se conoce como scripting, con lo que PowerShell, es también una potente herramienta para implementar tus propios scripts.
PowerShell
¿Porque PowerShell?
Es posible que te preguntes, ¿porque PowerShell? Una de las ventajas de PowerShell es que se trata de una shell multiplataforma, estando disponible en los principales sistemas operativos de forma nativa. Aunque esto lo tienes que coger con pinzas, en tanto en cuanto, no todos los comandos están disponibles en todos los sistemas operativos.
La otra gran pregunta es ¿necesito PowerShell?¿Es PowerShell para mi?¿Me servirá PowerShell? Sinceramente, cualquier lenguaje de scripting te servirá. Al fin y al cabo, se trata de una herramienta de productividad excepcional, en tanto en cuanto, te evitará realizar operaciones repetitivas una y otra vez. Simplemente, tienes que escribir esas tareas en un script, y ejecutar o incluso agendar su ejecución para que se inicie cuando tu necesites.
Sobre los comandos de PowerShell
Una vez, ya tienes una idea de idea de que es PowerShell, y de las posibilidades que tiene, y antes de instalar PowerShell y preparar tu laboratorio de trabajo, recojo a continuación algunas ideas y conceptos, para que te vayas formando una idea de a que te vas a enfrentar.
La primera idea o concepto es que, los comandos de PowerShell siguen la sintaxis de Verbo-Nombre
. De esta forma cada comando indica la acción que vas a realizar y con que la vas a realizar. Por ejemplo, la mas clara y la que utilizarás mas a menudo en los próximos capítulos del tutorial Get-Help
. Básicamente se trata de conseguir una ayuda.
A este comando de conseguir una ayuda lo continuarás con un parámetro, en este caso, con otro comando. Una vez ejecutado en la línea de comandos, te mostrará información sobre el comando del que te quieres informar. Por ejemplo, y aunque parezca muy obvio,
Get-Help Get-Help
La instrucción anterior, utiliza Get-Help
para mostrarte información sobre Get-Help
. En este caso, te pondrá un resultado como el que puedes ver a continuación,
Displays information about PowerShell commands and concepts.
Get-Help
[[-Name] <String>]
[-Path <String>]
[-Category <String[]>]
[-Full]
[-Component <String[]>]
[-Functionality <String[]>]
[-Role <String[]>]
[<CommonParameters>]
Familiarizándote con PowerShell
Ahora que conoces la sintaxis de los comandos de PowerShell, y con el objetivo de que quede grabado a fuego en tu mente, te muestro algunos ejemplos, de lo que puedes hacer.
¿Que procesos corren en mi ordenador?
El primero de los comandos o CmdLet, como se llaman en PowerShell, que te voy a mostrar te permite listar todos los procesos que están corriendo, es decir, en funcionamiento, en tu ordenador, o en la máquina en la que estés ejecutando PowerShell. Para conocer que procesos están en funcionamiento, simplemente ejecuta en una consola de PowerShell la siguiente instrucción,
Get-Process
Esto mostrará algo como lo siguiente,
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0,01 3,85 0,00 2556 …48 (sd-pam)
0 0,21 29,75 15,53 2462 …62 /usr/bin/monito
0 0,00 7,75 0,59 518 518 accounts-daemon
0 0,00 0,76 26,07 519 519 acpid
0 0,00 0,00 0,00 106 0 acpi_thermal_pm
...
Solo te muestro unas pocas líneas, ya que el resto es igual, pero con otros procesos y consumos.
Pero ¿y si solo quieres saber sobre un determinado proceso?. En este caso, tienes que añadir un parámetro a tu CmdLet, el nombre del proceso. Esto lo puedes hacer de la siguiente forma,
Get-Process -Name firefox
Este comando te devolverá algo como lo que puedes ver a continuación,
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0,00 593,96 4.086,98 43274 …02 firefox
Si quieres conocer todos los CmdLet y funciones que están disponibles en tu sistema operativo, puedes utilizar el CmdLet Get-Command
.
Sobre los alias
¿Y si quieres conocer los archivos que hay en el directorio que te encuentras? Para esto tienes el CmdLet Get-ChildItem
. Si lo ejecuto en mi equipo y en el directorio en el que me encuentro obtendré algo como,
Directory: /home/lorenzo
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 27/6/2020 10:27 Applications
l---- 9/5/2020 20:58 Descargas -> /datos/Descargas
Y ahora estarás pensando, que tienes que aprender nuevas instrucciones para viejos comandos. Me refiero a que esto mismo lo hacías con dir
. Buenas noticias, en PowerShell* también puedes utilizar dir.
Esto es lo que se conoce como alias. Básicamente le pones un apodo a algunos comandos para que te resulte más cómodo utilizarlos.
¿Que alias tienes disponibles para utilizar? De nuevo tienes que recurrir a otro CmdLet, se trata de Get-Alias
, que es el que se encargará de mostrarte todos los alias que hay definidos en el momento de ejecutar la instrucción. Por ejemplo, si ejecuto Get-Alias
en el equipo en el que ahora mismo me encuentro, me mostrará algo como lo siguiente,
CommandType Name Version Source
----------- ---- ------- ------
Alias ? -> Where-Object
Alias % -> ForEach-Object
Alias cd -> Set-Location
...
Conclusión
Espero que esta introducción haya sido suficiente para que pique el gusanillo y quieras profundizar en el conocimiento de PowerShell, tanto para utilizarlo como una línea de comandos, para utilizarlo como una shell, como para hacer tus scripts de automatización.
En el siguiente capítulo te mostraré como instalar PowerShell en Windows y Linux, y preparar tanto un laboratorio para todos los ejemplos que vamos a ir viendo, como el entorno de desarrollo.
Imagen de portada Oskar Yildiz en Unsplash