Una delle prime cose che fai quando impari un nuovo linguaggio informatico è imparare a fare input e output. Abbiamo imparato come eseguire l’output dal suggerimento Introduzione a PowerShell. Se ricordi, abbiamo utilizzato il cmdlet Write-Output. Ora è il momento di imparare a leggere un file e visualizzarne l’output sullo schermo.

Supponiamo di avere un file di testo denominato “C: \ Temp \ Temp.txt” e che contenga dieci righe. Il modo più semplice per visualizzare queste righe è utilizzare il cmdlet Get-Content. Ecco come appare l’esecuzione di questo cmdlet sul nostro file: (Vedi figura 1.)

image

Figura 1. Get-Content legge un file.

E se volessi visualizzare solo le prime tre righe del file?

Ci sono diversi modi per farlo, ma forse il modo più semplice è usare le variabili. In PowerShell, una variabile può essere qualsiasi tipo di dati e il nome della variabile inizia con “$”. Esempi di nomi di variabili includono “$ myName”, “$ numbers”, “$ today”, ecc. Assegnate un valore a una variabile con un segno “=”, quindi un comando PowerShell legale sarebbe

PS> $myName = 'Barry'

Con quello sfondo, ora ne sappiamo abbastanza per visualizzare le prime tre righe del nostro file. Assegneremo il contenuto del file a una variabile chiamata $ righe, e quindi visualizzeremo le prime tre righe its: (Vedi figura 2.)

image

Figura 2. Utilizzo di una variabile.

Qui, assegniamo il contenuto del file alla variabile $ lines (che in realtà è un array) e usiamo la sintassi “[0..2]” per accedere agli elementi 0, 1 e 2 dell’array. L’elemento 0 è la prima riga; l’elemento 1 è la seconda riga; e l’elemento 2 è la terza riga.

È altrettanto facile accedere alle ultime righe dell’array. Questo viene fatto utilizzando pedici negativi, quindi $ line [-1] è l’ultima riga dell’array; $ riga [-2] è la penultima riga dell’array; ecc. La figura seguente mostra come visualizzare le ultime tre righe del nostro file: (Vedi Figura 3.)

image

Figura 3. Accesso a un array utilizzando pedici negativi.

Un altro modo per recuperare il testo da un file è cercarlo e visualizzare i risultati. Per cercare testo in PowerShell, utilizzare il cmdlet Select-String. Select-String richiede molte opzioni, che puoi vedere se chiedi aiuto sul cmdlet, ma un semplice modulo richiede che tu specifichi semplicemente il nome del file e il modello che stai cercando. Quindi se volessi trovare tutte le righe nel mio file che contengono il testo “line” (che sarebbe ogni riga) potrei farlo in questo modo: (Vedi Figura 4.)

image

Figura 4. Ricerca di un pattern in un file.

Select-String è abbastanza potente perché cerca utilizzando espressioni regolari. (C’è un altro suggerimento intitolato “Introduzione alle espressioni regolari”.) Quindi, se si desidera trovare tutte le righe che iniziano con una “l” e terminano con una sola cifra (cioè tutte le righe tranne la riga 10), sarebbe this: (Vedi Figura 5.)

image

Figura 5. Ricerca in un file utilizzando un’espressione regolare.

Abbiamo parlato molto della lettura dei file, quindi dovremmo concludere parlando della scrittura dei file. Ovviamente puoi usare il familiare “>”

carattere per reindirizzare l’output a un file, ma in PowerShell è anche possibile utilizzare il cmdlet Out-File per inviare l’output a un file.

Supponiamo che tu voglia ottenere un elenco di tutti i processi attivi sul tuo sistema. Il cmdlet per eseguire questa operazione è Get-Process. Una parte dell’output di Get-Process è mostrata qui: (Vedi Figura 6.)

image

Figura 6. Output parziale da Get-Process.

Notare che l’ottava riga dall’ultima viene troncata. Quella riga termina con “vmware-usbarbitrat …​”. Se dovessimo semplicemente inviare questo output a un file, anche il file conterrebbe questa riga troncata. Invece, possiamo usare l’opzione “-width” di Out-File per indicare che vogliamo una larghezza maggiore in modo da evitare il troncamento. Ecco il nostro comando per ottenere i processi, reindirizzare l’output a Out-File e specificare una larghezza per l’output:

PS C:\Bat> Get-Process | Out-File C:\Temp\Temp2.txt -width 100

Questo suggerimento (13507) si applica a Windows 7, 8 e 10.