PowerShell >_ Pipe (que no es lo mismo que pipa)

Hola de nuevo aprendices, tal y como dice el título, hoy hablaremos un poco de los Pipe ( | ). Por si alguien no se acuerda, los pipe ya los teníamos en los cmd de siempre… quien no ha escrito nunca un dir | more en su cmd, que levante la mano  🙂

Con los pipe en powershell podremos pasar los resultados de un comando a otro, pero como soy de los que piensan que se aprende caminando, veamos unos ejemplos y además aprenderemos algunas cosillas más.

Al ataque…..

Arrancamos nuestro PS y escribimos ls -Recurse | more … pero tenemos ls en powershell …. pues no… os acordáis en el post anterior comentamos el tema de los alias… si queréis saber que cmdlet ejecuta el alias ls ejecutad Get-Alias ls.

Como podéis ver, el resultado del ls -Recurse se lo hemos pasado a more para que lo muestre la información de forma paginada.

Perfecto peroooo…. no acabo de verlo claro….

Bueno no pasa nada vamos a ver otros ejemplos,  veamos el cmdlet get-process que nos sirve para ver los procesos, y supongamos que queremos que el resultado se nos muestre ordenado por nombre de proceso…. 

Por si no os habéis dado cuenta, el alias sort pertenece al cmdlet Sort-Object y si miráis la ayuda veréis que lo que estamos haciendo es ordenar el objeto (resultado) por la propiedad ProcessName, OJO, estamos interactuando con objetos, no con texto y esto nos da una flexibilidad que con un cmd no tenemos… ALEGRÍA

Veamos otro ejemplo, pero aquí vamos a introducir alguna cosilla más… veamos…

1..5 significa que estamos definiendo un rango desde el 1 al 5. El cmdlet foreach nos permite realizar una operación para cada elemento de una colección, en nuestro ejemplo la colección es del 1 al 5, y la operación que realizaremos es ( Write-Host ) escribir el valor de la colección, un guión y hola, tal y como se puede ver en el resultado. Aquí os comento una cosita, foreach tiene un alias que es el % con lo que si en lugar de escribir foreach escribimos % el resultado será el mismo, aquí os lo demuestro:

Veamos otro ejemplo, volvemos con Get-Process:

Get-Process | Where-Object {$_.Name -match “iexpl”}

Esta vez hemos realizado un filtrado el objeto resultante del cmdlet get-process cuya Propiedad.ProcessName es “iexpl”.

Como véis, y aunque no lo parezca hoy hemos visto varias cosas de powershell, desde el PIPE – objetivo de este post – , pasando por cmdlets como get-process, ls, sort, write-host y como “matchear” resultados, así como definir un rango de datos númericos de forma sencilla.

Espero que os haya gustado, como siempre si tenéis alguna duda o consulta los comentarios del post estan abiertos…. y no mordemos 😀

 

 

Empezando con PowerShell >_

Hola a todos:

Para empezar, no os voy a soltar el rollo de que es Powershell, un cmdlet, etc. Ya hay mucha información en internet y con una búsqueda en duckduckgo, Google o bing encontraréis dicha información de forma más que sencilla, ya sabéis que intentamos no repetir trabajo, sobre todo cuando es un tema más que documentado. Lo que vam os a intentar es que aprendamos con ejemplos que nos puedan servir para aprender practicando, al principio evidentemente serán sencillos, pero poco a poco los iremos complicando y dándoles uso dentro del mundo de sistemas, redes, virtualización, forensics, pentesting, etc. Espero que todos incluyendo nosotros aprendamos juntos, con esto os animo a que nos dejéis comentarios, preguntas, que nos cuestionéis, en definitiva, que interactuéis con nosotros.

Advertencia

Puede ser que algunos cmdlets no os funcionen, son cosas del powershell, dependiendo de la versión de PS que tengamos puede haber cmdlets que no estén o que tengan otros parámetros. “Revisad vuestros sistemas y necesidades”. A partir de aqui ….

 

¿Empezamos?

Abrimos Powershell ISE,

 

Una vez hemos arrancado el Powershell ISE, en la sección inferior lo primero que quiero saber es que versión de PowerShell estoy utilizando, para ello usaremos el cmdlet psversion o Get-Psversion.

 

Depende de la versión de PS que tengamos el cmdlet anterior no os funcionará, pero podéis utilizar el siguiente: $PSVersionTable.PSVersion

Ahora, vamos a ver si hay definido algún alias,  a lo mejor me ahorro escribir un poco…. veamos el comando Get-Alias, me bastará ejecutarlo directamente o necesito parámetros… uhmmm veamos la ayuda sobre dicho cmdlet Get-Help Get-Alias -online y veremos la información online del cmdlet Get-Alias, que chulo ¿no?.

 

También podemos pedir la ayuda de forma local con Get-Help Get-Alias,  antes de ejecutarlo, conviene que actualicemos la ayuda en local con un powerhsell en modo administrador y con el cmdlet Update-Help.

Ejecutamos Get-Help Get-Alias.

Bueno, ya sabemos como buscar ayuda de los cmdlets, volvamos a lo que queríamos antes, saber los alias definidos. Get-Alias

Vaya, hay un montón de alias definidos, podemos ver el alias y el cmdlet de PS que ejecuta, os recomiendo que los miréis con tranquilidad, por ejemplo el alias cp ejecuta realmente Copy-Item, o el Alias cls que ejecuta el cmdlet Clear-Host. El tema de los alias nos permite personalizar los nuestros propios y “personalizar” nuestra shell, recordad que Get-Help cmdlet nos mostrará la ayuda del cmdlet del que necesitemos ayuda.

Veamos otro alias, por ejemplo el alias cat.

Y si le añadimos el parámetro -Tail, veremos el final del archivo.

Bueno, hemos empezado por lo más básico, hemos aprendido como arrancar powershell, hemos ejecutado algunos cmdlets y hemos aprendido a buscar la ayuda sobre los cmdlets que necesitemos, tambien hemos visto un poquito de los alias.

Espero que no os hayais aburrido mucho, la cosa irá mejorando pero tened en cuenta que nuestra intención es aprender progresivamente, vosotros y nosotros.

!! Hasta la próxima aprendices de sysadmin…. !!!