Le pipeline possono essere utilizzate dovunque in Windows PowerShell. Sebbene sullo schermo venga visualizzato del testo, Windows PowerShell non trasferisce del testo da un comando all'altro, bensì degli oggetti.

La notazione utilizzata per le pipeline è simile a quella adottata in altre shell, per cui a prima vista non risulta evidente la novità introdotta da Windows PowerShell. Se ad esempio si utilizza il cmdlet Out-Host per imporre la visualizzazione pagina dopo pagina dell'output di un altro comando, tale output ha l'aspetto del normale testo visualizzato sullo schermo, suddiviso in pagine:

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
...

Il comando Out-Host -Paging è un elemento della pipeline che risulta utile ogni volta che è presente un output dettagliato che si desidera visualizzare lentamente, soprattutto se l'operazione consuma molte risorse della CPU. Poiché l'elaborazione viene trasferita al cmdlet Out-Host quando è pronta una pagina completa da visualizzare, i cmdlet precedenti nella pipeline non agiscono fino a quando non è disponibile la pagina seguente dell'output. Questo comportamento è osservabile utilizzando Gestione attività Windows per monitorare l'utilizzo della CPU e della memoria da parte di Windows PowerShell.

Eseguire il comando seguente: Get-ChildItem C:\Windows -Recurse. Confrontare l'utilizzo della CPU e della memoria con questo comando: Get-ChildItem C:\Windows -Recurse | Out-Host -Paging. Sullo schermo viene visualizzato del testo ma ciò accade perché è necessario rappresentare gli oggetti sotto forma di testo in una finestra della console. Si tratta solo di una rappresentazione di quanto in realtà sta avvenendo in Windows PowerShell. Si consideri ad esempio il cmdlet Get-Location. Se si digita Get-Location quando il percorso corrente è la radice dell'unità C, l'output visualizzato sarà il seguente:

PS> Get-Location

Path
----
C:\

Se il testo viene trasformato in una pipeline, mediante un comando come Get-Location | Out-Host, viene trasferito un insieme di caratteri da Get-Location a Out-Host nell'ordine in cui tali caratteri sono visualizzati sullo schermo. In altri termini, se si ignorano le informazioni dell'intestazione, Out-Host riceve dapprima il carattere 'C', quindi il carattere ':' e infine il carattere '\'. Il cmdlet Out-Host non può pertanto stabilire il significato da associare ai caratteri dell'output del cmdlet Get-Location.

Anziché utilizzare il testo per le comunicazioni tra i comandi di una pipeline, in Windows PowerShell vengono utilizzati gli oggetti. Dal punto di vista dell'utente, gli oggetti combinano le informazioni correlate in una forma che ne rende facile la modifica unitaria e l'estrazione di elementi specifici necessari.

Il comando Get-Location non restituisce testo che contiene il percorso corrente, bensì un pacchetto di informazioni denominato oggetto PathInfo, che contiene il percorso corrente e altre informazioni. Il cmdlet Out-Host quindi invia questo oggetto PathInfo allo schermo, lasciando decidere a Windows PowerShell quali informazioni visualizzare e come visualizzarle in base alle proprie regole di formattazione.

In effetti l'output delle informazioni di intestazione del cmdlet Get-Location viene aggiunto solo alla fine del processo, nell'ambito del processo di formattazione dei dati per la loro visualizzazione sullo schermo. Ciò che compare sullo schermo è un riepilogo delle informazioni e non una rappresentazione completa dell'oggetto dell'output.

Dato che possono esistere più informazioni nell'output di un comando di Windows PowerShell rispetto a ciò che viene visualizzato nella finestra della console, come è possibile recuperare gli elementi non visibili? Come visualizzare i dati aggiuntivi? E come fare per visualizzare i dati in un formato diverso da quello normalmente utilizzato da Windows PowerShell?

Nella parte restante di questo capitolo verrà descritto come individuare la struttura di specifici oggetti di Windows PowerShell, selezionando elementi specifici e formattandoli per una più agevole visualizzazione, nonché come inviare tali informazioni a percorsi alternativi di output, ad esempio file e stampanti.




Argomenti della Guida