La canalización se puede usar prácticamente en cualquier parte de Windows PowerShell. Aunque se muestre texto en pantalla, Windows PowerShell no canaliza texto entre los comandos, sino objetos.

La notación utilizada para las canalizaciones es parecida a la que se utiliza en otros shells por lo que, a primera vista, puede no ser evidente que Windows PowerShell introduce novedades. Por ejemplo, si usa el cmdlet Out-Host para forzar una presentación página a página del resultado de otro comando, dicho resultado se parecerá al texto normal mostrado en pantalla, dividido en páginas:

PS> Get-ChildItem -Path C:\WINDOWS\System32 | Out-Host -Paging

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\system32

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2005-10-22  11:04 PM        315 $winnt$.inf
-a---        2004-08-04   8:00 AM      68608 access.cpl
-a---        2004-08-04   8:00 AM      64512 acctres.dll
-a---        2004-08-04   8:00 AM     183808 accwiz.exe
-a---        2004-08-04   8:00 AM      61952 acelpdec.ax
-a---        2004-08-04   8:00 AM     129536 acledit.dll
-a---        2004-08-04   8:00 AM     114688 aclui.dll
-a---        2004-08-04   8:00 AM     194048 activeds.dll
-a---        2004-08-04   8:00 AM     111104 activeds.tlb
-a---        2004-08-04   8:00 AM       4096 actmovie.exe
-a---        2004-08-04   8:00 AM     101888 actxprxy.dll
-a---        2003-02-21   6:50 PM     143150 admgmt.msc
-a---        2006-01-25   3:35 PM      53760 admparse.dll
<SPACE> next page; <CR> next line; Q quit
...

El comando Out-Host -Paging es un elemento de canalización que le será útil siempre que disponga de un resultado largo que desee ver lentamente. Es especialmente útil si la operación hace un uso intensivo de la CPU. Dado que el procesamiento se transfiere al cmdlet Out-Host cuando hay una página completa lista para mostrarse, los cmdlets que le preceden en la canalización interrumpen su ejecución hasta que la página siguiente de resultados está disponible. Esto se puede observar si se utiliza el Administrador de tareas de Windows para supervisar el uso que hace Windows PowerShell de la CPU y de la memoria.

Ejecute el comando siguiente: Get-ChildItem C:\Windows -Recurse. Compare el uso de la CPU y de la memoria con este comando: Get-ChildItem C:\Windows -Recurse | Out-Host -Paging. Lo que se muestra en pantalla es texto, pero es así porque es necesario representar los objetos como texto en una ventana de consola. Se trata únicamente de una representación de lo que está ocurriendo realmente en Windows PowerShell. Por ejemplo, considere el cmdlet Get-Location. Si escribe Get-Location mientras la ubicación actual es la raíz de la unidad C, se mostrará el siguiente resultado:

PS> Get-Location

Path
----
C:\

Si Windows PowerShell canalizara el texto, al emitir un comando como Get-Location | Out-Host, se pasaría de Get-Location a Out-Host un conjunto de caracteres en el orden en que se muestran en pantalla. En otras palabras, si pasara por alto la información de encabezado, Out-Host recibiría primero el carácter C', después el carácter ':' y, por último, el carácter '\'. El cmdlet Out-Host no podría determinar el significado de los caracteres del resultado del cmdlet Get-Location.

En lugar de usar texto para la comunicación entre comandos de una canalización, Windows PowerShell usa objetos. Desde el punto de vista de un usuario, los objetos empaquetan la información relacionada en un formato que permite manipularla fácilmente como una unidad, así como extraer los elementos concretos que se necesiten.

El comando Get-Location no devuelve texto con la ruta de acceso actual. Lo que devuelve es un paquete de información denominado objeto PathInfo que contiene la ruta de acceso actual junto con otra información. A continuación, el cmdlet Out-Host envía este objeto PathInfo a la pantalla y Windows PowerShell decide qué información va a mostrar y cómo la va a mostrar en función de sus reglas de formato.

De hecho, la información de encabezado que el cmdlet Get-Location proporciona como resultado se agrega solamente al final, como parte del proceso de aplicar formato a los datos para su presentación en pantalla. Lo que se muestra en pantalla es un resumen de la información, y no una representación completa del objeto de salida.

Dado que en el resultado de un comando de Windows PowerShell puede haber más información que la que se muestra en la ventana de la consola, ¿cómo se pueden recuperar los elementos no visibles? ¿Cómo se pueden ver los datos adicionales? ¿Cómo se pueden ver los datos en un formato distinto al que utiliza normalmente Windows PowerShell?

En el resto de este capítulo se explica cómo puede descubrir la estructura de objetos específicos de Windows PowerShell (mediante la selección de elementos concretos y la aplicación de formato a estos elementos para facilitar su presentación) y cómo puede enviar esta información a ubicaciones de salida alternativas, como archivos e impresoras.




Tabla de contenido