Bienvenidos a una nueva entrega sobre Powershell, en la anterior entrada hablamos sobre los conceptos básicos sin llegar a profundizar demasiado.
En esta entrada trataremos más a fondo el tema de la navegación por consola, los alias y el formato de salida.

Navegando por la consola en PowerShell

En Powershell hay diversas formas de navegar por la consola. Para ello veremos un par de comandos junto a sus alias que nos podrán ayudar en esta tarea.
Muchos de los alias son compartidos en batch y bash de modo que puede que nos resulten familiares. Paso a mostraros los principales y sus aliases.

Localización actual

La dirección a la izquierda de donde escribimos es donde nos encontramos actualmente:

Directorio donde se ejecuta PowerShell
Directorio donde se ejecuta PowerShell

Como se puede observar el alias “pwd” nos muestra en la dirección que nos encontramos. Este es un alias del Cmdlet Get-Location que junto al alias gl hacen la misma función. El Cmdlet get-location tiene más funcionalidades las cuales son explicadas aquí.

Cambiando de directorio

Pero nosotros seguramente querremos movernos a un directorio especifico, por ejemplo al directorio que hayamos creado para los scripts. Para ello utilizaremos el Cmdlet Set-Location este a su vez tiene varios aliases los cuales nos pueden resultar más familiares, como son: cd, sl o chdir.

Cambiando al directorio C:\ en PowerShell
Cambiando al directorio C:\

Si queremos subir un directorio en la rama utilizaremos dos puntos “..”, si queremos subir dos directorios en la rama utilizaremos los puntos con un separador en medio “../..”.

Cambiando de directorios por el sistema de Windows en PowerShell
Cambiando de directorios por el sistema de Windows

El Cmdlet set-location tiene más funcionalidades las cuales son explicadas aquí.

Crear y borrar directorios

Para crear un directorio se utiliza el Cmdlet New-Item junto a sus alias ni y md. Este último (md) es a su vez un alias de mkdir que es un comando tanto en batch como en bash que viene a decir “make directory”. El Cmdlet new-item tiene más funcionalidades las cuales son explicadas aquí.
Para borrar archivos o objetos utilizaremos el Cmdlet Remove-Item o uno de sus aliases: del, rd, ri, rm, erase y rmdir. Su uso es simple y lo mostraré en la siguiente imagen.

Creando un directorio llamado scripts, borrándolo e intentando acceder a él de nuevo. En PowerShell
Creando un directorio llamado scripts, borrándolo e intentando acceder a él de nuevo.

El Cmdlet remove-item tiene más funcionalidades las cuales son explicadas aquí.

Listando y buscando archivos

Listaremos el contenido de un directorio mediante el Cmdlet Get-Childitem o uno de sus alias: ls, gci y dir. Se obtendrán valores en los archivos estos son los siguientes:

  • d: Directorio
  • a: Archivo
  • r: Read (lectura)
  • h: Hide (oculto)
  • s: Sistema
  • l: Reparse point, symlink (Link del sistema)

Para buscar archivos haremos uso del comando -include (buscara por el nombre de archivo), -Path (para mostrar el directorio) y -recurse (lista el contenido de los subdirectorios). En caso de querer mostrar archivos ocultos añadiremos -force.

Ejemplo en el que busco tanto el archivo *02* en scripts como *password* en C:\
Ejemplo en el que busco tanto el archivo *02* en scripts como *password* en C:\

El Cmdlet get-childitem tiene más funcionalidades las cuales son explicadas aquí.

Mover y copiar directorios y archivos

Normalmente se suele añadir la función de renombrar, pero estando acostumbrado a la bash de Linux, hago todo con el comando de mover. La Cmdlet move-item junto a sus aliases (move, mi y mv) se encargan de mover los directorios archivos. La Cmdlet copy-item junto a sus aliases (copy, cpi y cp) se encargan de copiar los directorios o archivos.
La sintaxis es la siguiente:
Acción(tanto move como copy) “ruta del archivo origen” “ruta del archivo destino” (se pueden utilizar comillas en caso de haber espacios de por medio”.

Copiando y moviendo archivos en PowerShell
Copiando y moviendo archivos en PowerShell

En esta imagen observamos como al mover el archivo 02 en el mismo directorio, lo renombramos directamente. Es por ello que apenas le doy uso al Cmdlet rename-item.
El Cmdlet move-item tiene más funcionalidades las cuales son explicadas aquí.
El Cmdlet copy-item tiene más funcionalidades las cuales son explicadas aquí.

Con estos conceptos básicos podrás navegar por PowerShell sin mucha dificultad.

Alias

A pesar de haberlos mencionado en el capítulo anterior, hay muchas cosas que no comenté. Existe la posibilidad de crear nuestros propios alias con la Cmdlet new-alias y se pueden modificar con la Cmdlet set-alias.
La sintaxis es simple:

El Cmdlet new-alias tiene más funcionalidades las cuales son explicadas aquí.

Estos también pueden ser exportados mediante export-alias “fichero de texto” e importar con el Cmdlet import-alias “fichero de texto”

Formato de salida

Cuando ejecutamos un Cmdlet get en PowerShell, arroja unos resultados en la consola. Estos no son todos los resultados que el Cmdlet genera, solo se muestran los que se configuraron por defecto. Para mostrar más resultados deberemos utilizar los formatos.

Format list

La mayoría de comandos get que arrojan más de un valor, suelen presentarse en un tabla como valor por defecto. Para probarlo os mostraré el valor que arroja el Cmdlet get-alias:

Get-Alias por defecto
Get-Alias por defecto

Sin embargo si queremos obtener más información sobre cada uno de los parámetros, podremos expandirlos una “pipe” | y el siguiente Cmdlet format-list. De esta forma se presentarán en un formato de lista.

Expandiendo el Cmdlet Get-Alias
Expandiendo el Cmdlet Get-Alias

Como podéis ver ahora se muestran más campos, estos a su vez pueden ser filtrados (-property “Objeto”) o expandidos con el uso del *. En la siguiente imagen hago un get-alias con un filtro de nombre y de formato le digo que me de todas las propiedades.

Obtener todas las propiedades del alias que se llame igual que ?
Obtener todas las propiedades del alias que se llame igual que ?

El Cmdlet format-list tiene más funcionalidades las cuales son explicadas aquí.

Format table

El Cmdlet format-table nos permite hacer lo mismo que el anterior Cmdlet, pero el formato será una lista si no una tabla. Volviendo al ejemplo anterior, cuando realizamos get-alias, el resultado que obtenemos es una tabla con 4 columnas. Si utilizamos el parámetro * al final del format-table veremos que arroja tantas columnas que se nos hace imposible visibilizarlas.

Es por ello que dependiendo de el resultado que arroje un comando te interesará utilizar este tipo de formato o el formato en lista.

Conclusión

Con esto termino un artículo más sobre PowerShell, en los siguientes episodios explicaré la gestión de archivos (añadir texto a un archivo, expulsar los resultados de PowerShell en un archivo…) y el tema de las variables.
Cuando estos conceptos estén explicados, hablaremos sobre la iteración, las funciones y los bucles. Pudiendo pasar finalmente al desarrollo de scripts, en el cual expondré un par de scripts básicos que uso a diario.

Espero que os haya servido de ayuda. Un saludo desde Alemania!