@media screen and (min-width: 580px) { .flotantewhatsapp{ display:none; } }

Compartir por WhatsApp

Inicio - Windows - PowerShell - Curso básico de Powershell: Canalización

Curso básico de Powershell: Canalización

La canalización es uno de los puntos más importantes y es esencial entender su funcionamiento.

Entendemos la canalización el proceso por el que la salida de un comando es redirigida como entrada de otro comando, y podemos enlazar varios comandos de la forma que queramos y necesitemos.

Los principales puntos para entender la canalización son los siguientes:

  • Los cmdlets trabajan siempre con objetos.
  • Los objetos de salida pasan a ser los objetos de entrada del siguiente cmdlet
  • Los objetos pueden modificarse durante una canalización
  • El resultado final muestra los objetos y propiedades que han dado como resultado la ejecución de los distintos cmdlets
  • Puede que el resultado final sea vacío ya que durante el procesado no han generado ningún objeto final
  • El resultado final lo vemos como un texto, pero en realidad es la representación en modo texto de un objeto.
  • El resultado final puede representar de forma parcial el resultado completo, ya que la representación en modo texto de un objeto puede variar según la realicemos.

Como en otros lenguajes la canalización se realiza mediante el carácter |, que es lo que separa unos comandos de otros.

Vamos a ver un ejemplo paso a paso.

Get-Service
Get-Service

Esto nos da como resultado el conjunto formado por todos los servicios Windows de la máquina. Lo que vemos por pantalla es la representación en modo texto de esos objetos.

Ahora vamos a filtrar esos objetos, seleccionando solo aquellos cuyo estado sea igual a “running”

Get-Service | Where-Object ...
Get-Service | Where-Object …

El resultado es similar al comando anterior pero ahora en lugar de tener 152 servicios tenemos 60. Lo que ha pasado es que los 152 objetos que representan a los servicios obtenidos por Get-Service, se han quedado en 60 tras seleccionar únicamente aquellos cuya propiedad Status es igual a Running.

El siguiente paso es que ese resultado que hemos obtenido lo queremos ordenado de otra forma. Entonces ejecutamos

Get-Service | Where-Object ...
Get-Service | Where-Object …

Ahora lo que hemos hecho es pasar el resultado del conjunto de objetos al comando Sort-Object que los ordena alfabéticamente basándose en la propiedad Displayname. Vemos que la salida del comando no ha cambiado mucho.

Vamos a dar otro paso

Get-Service | Where-Object ...
Get-Service | Where-Object …

Ahora vemos que la salida en pantalla a variado ligeramente. Hemos redirigido la salida anterior al comando Select-Object que nos permite seleccionar que propiedades de cada objeto servicio queremos mostrar, en este caso, las propiedades Displayname, Name y ServicesDependedOn. Esta última propiedad no la estábamos viendo en los comandos anteriores ya que en la representación a texto por defecto de los servicios no está incluida, pero siempre ha estado disponible en el resultado final. Con la opción -Firs 10, lo que indicamos es que sólo queremos los 10 primeros objetos del resultado.

Por último, en lugar de sacar el resultado por pantalla lo vamos a exportar a un archivo en formato CSV.

Get-Service | Where-Object ...
Get-Service | Where-Object …

Vemos que ahora no hemos obtenido ningún resultado por pantalla, lo que obtenemos es una archivo con la representación de los objetos que han quedado al final de toda la canalización de los objetos por los distintos cmdlets.

 

Comandos básicos de salida en pantalla

Por defecto el resultado final de un comando se muestra por pantalla representándolo en modo texto, pero tenemos algunas opciones para cambiar ese comportamiento.

Tenemos los cmdlets con verbo Write y Out:

  • Write-Host, Write-Output, Write-Verbose, Write-Error, Write-Warning…
  • Out-Default, Out-File, Out-GridView…

Normalmente se suele utilizar Write-Host y Write-Ouput para sacar por pantalla alguna información. Pero hay una gran diferencia, Write-Host escribe directamente en pantalla el resultado, mientras que Write-Output genera como salida un objeto (o varios) que puede ser canalizado a otros comandos.

Veamos un ejemplo:

Write-host vs Write-Output
Write-host vs Write-Output

Vemos que el resultado es el mismo. Ambos generan un texto en la pantalla. Ahora veamos la diferencia:

Write-host vs Write-Output
Write-host vs Write-Output

Vemos que Write-Output genera un objeto de tipo String, mientras que Write-Host no genera ningún objeto como resultado

Los cmdlets Out-XXX son muy sencillos ya que redirigen la salida tal y como se indica en el comando:

  • Out-Default: redirige a la salida por defecto
  • Out-File: redirige a un archivo
  • Out-GridView: abre una ventana en forma de tabla
  • Out-Printer: lo redirige a la impresora por defecto

Ejemplo:

Out-File
Out-File

Como cmdlet especial tenemos Tee-Object, que nos permite obtener el resultado a través de dos salidas, por ejemplo a un fichero y por pantalla o a una variable y por pantalla.

Tee-Object
Tee-Object

 

Temas

  1. Introducción
  2. Instalación y requerimientos
  3. Ayuda
  4. Ampliando la funcionalidad
  5. Canalización
  6. Operadores
  7. Comandos básicos
  8. Formato de salida
  9. Importar y Exportar datos
  10. Arrays y HashTables
  11. Ejecución de Scripts
  12. Providers
  13. Trabajos
  14. Scripts y funciones
  15. Gestión de Errores

 

Acerca de Roberto Orayen

Compruebe también

Curso básico de Powershell: Scripts y Funciones

Cualquier comando que podemos ejecutar en una consola PowerShell puede ser escrito y guardado en …

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

5 × 3 =

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies
Blog Maquinas Virtuales