PowerShell Get-Content un equivalente di PowerShell Tail

Con l’automazione, leggere i dati da un file di testo è uno scenario comune. La maggior parte dei linguaggi di programmazione ha almeno un modo per leggere i file di testo, e PowerShell non fa eccezione. Il cmdlet Get-Content di PowerShell, un equivalente della coda di PowerShell, legge il contenuto di un file di testo e importa i dati in una sessione di PowerShell.

Il cmdlet Get-Content di PowerShell è uno strumento indispensabile quando è necessario utilizzare file di testo come input per lo script. Forse lo script di PowerShell deve leggere un elenco di computer da monitorare o importare un modello di email da inviare agli utenti. PowerShell Get-Content supporta facilmente questi scenari!

E se volessimo seguire un file di registro in tempo reale? Sì, anche il cmdlet Get-Content di PowerShell può farlo! Continua a leggere questo articolo e imparerai come utilizzare il cmdlet Get-Content per leggere i file di testo in PowerShell.

Prerequisiti

Se sei interessato a seguire gli esempi in questo tutorial, avrai bisogno dei seguenti requisiti.

  • Avrai bisogno di un computer che esegua Windows 10. Questo tutorial utilizza Windows 10 versione 20H2. Ma non preoccuparti, andrà bene anche con la versione di Windows 10 che hai.
  • Dovresti avere almeno Windows PowerShell 5.1 o PowerShell 7.1 installato sul tuo computer. Qui viene utilizzato PowerShell 7.1, ma funzionerà anche qualsiasi altra versione!
  • Scriverai e testerai comandi, quindi avrai bisogno di un editor di codice. Gli editor consigliati sono Windows PowerShell ISE, integrato in Windows, e Visual Studio Code (VSCode). Questo articolo utilizza VSCode.
  • Ti sarà utile anche creare una cartella di lavoro sul tuo computer. La cartella di lavoro può essere ovunque tu desideri. Tuttavia, noterai che gli esempi in questo tutorial risiedono nella cartella C:\demo.
  • Per iniziare, hai bisogno di un po’ di contenuto! Crea un file, nella tua cartella di lavoro, con il nome fruits.txt che includa dieci frutti diversi per semplicità. Utilizzerai questo file di testo in tutti gli esempi.
cherry
 berry
 apricot
 papaya
 raspberry
 melon
 peach
 tangerine
 cantaloupe
 orange

Non sai quale versione di PowerShell hai? Visita l’articolo Come Controllare la Tua Versione di PowerShell (Tutti i Modi!).

Lettura di un File di Testo e Restituzione del Risultato come Array di Stringhe

Il cmdlet Get-Content legge il contenuto da un file e, per impostazione predefinita, restituisce ogni riga di un file di testo come un oggetto stringa. Di conseguenza, la raccolta di oggetti PowerShell diventa un array di oggetti stringa.

Il codice seguente legge il contenuto del file fruits.txt e visualizza il risultato sulla console di PowerShell come mostrato nella schermata sottostante.

Get-Content .\fruits.txt
Retrieving the text file content using PowerShell Get-Content.

Get-Content legge e memorizza il contenuto come un array, ma come puoi esserne certo? Prima, salva il contenuto in un oggetto PowerShell che puoi poi esaminare per determinare il tipo.

Save the content into to a object
 $fruits = Get-Content .\fruits.txt
 Display the type of the object
 $fruits.GetType()
 Retrieve the count of items within the object
 $fruits.Count
 Output the contents of the object to the console
 $fruits

Guardando la schermata sottostante, la variabile $fruits è un array che contiene dieci oggetti. Ogni oggetto rappresenta una singola riga di testo.

Confirming that the text file content is stored as an array.

Tornando a una riga specifica da un file di testo

Nell’esempio precedente, hai appreso che il risultato predefinito di Get-Content è un array o una raccolta di oggetti. Ogni elemento in una raccolta corrisponde a un numero di indice, e gli indici di PowerShell iniziano tipicamente da zero.

Nella schermata sottostante si vede che ci sono dieci elementi nella stringa array. L’array ha indicizzato i dieci elementi da zero a nove.

Showing that the indexed items in the string array start at zero index.

Per visualizzare solo la quinta riga di contenuto, è necessario specificare il numero di indice 4, racchiuso tra parentesi quadre (noto come notazione array).

(Get-Content .\fruits.txt)[4]

Potresti notare che il comando Get-Content è racchiuso tra parentesi. Questa notazione dice a PowerShell di eseguire prima il comando racchiuso tra parentesi prima di altre operazioni.

Nella schermata sottostante, vedrai che l’unico risultato restituito è lamponi, che è l’elemento all’indice 4 e corrisponde alla quinta riga nel file di testo.

Returning a specific line from Get-Content results.

E se avessi bisogno di ottenere il contenuto dell’ultima riga? Fortunatamente, non è necessario conoscere il numero totale di righe. Invece, utilizza [-1] come indice, e Get-Content visualizzerà solo l’ultima riga del file.

(Get-Content .\fruits.txt)[-1]

Limitare il numero di risultati principali restituiti da Get-Content

Usa il parametro TotalCount di Get-Content per recuperare un numero specificato di righe da un file di testo. Il parametro TotalCount accetta un valore long che significa un valore massimo di 9.223.372.036.854.775.807.

Per esempio, il comando seguente legge il contenuto e limita il risultato a tre elementi.

Get-Content .\fruits.txt -TotalCount 3

Come ci si aspetterebbe, il risultato sotto mostra solo le prime tre righe dall’inizio del file di testo.

Reading the top three results using the Get-Content command and the TotalCount parameter.

Usa il parametro PowerShell Tail per restituire risultati dalla fine di un file

Nell’esempio precedente, hai usato il cmdlet PowerShell Get-Content per leggere un file di testo e limitare i risultati principali. È anche possibile ottenere l’opposto con PowerShell Get-Content. Usa il parametro PowerShell Tail per leggere un numero specificato di righe dalla fine di un file.

Il codice di esempio sotto legge il file di testo e visualizza il contenuto delle ultime quattro righe.

Get-Content .\fruits.txt -Tail 4

Dopo aver eseguito il comando PowerShell tail, l’output atteso sarà limitato alle ultime quattro righe di contenuto, come mostrato nell’immagine sotto.

Getting the results from the end of a file using the Get-Content Tail parameter.

Il parametro Tail viene spesso utilizzato insieme al parametro Wait. Utilizzando il parametro Wait, il file rimane aperto e controlla per nuovo contenuto una volta ogni secondo. La dimostrazione sotto mostra i parametri Tail e Wait in azione. Per uscire da Wait, utilizza la combinazione di tasti CTRL+C.

Get-Content -Path .\fruits.txt -Tail 1 -Wait
Using the wait and Tail parameters with Get-Content.

Restituendo i risultati come una singola stringa

Potresti aver notato negli esempi precedenti che hai gestito gli array di stringhe come output di PowerShell Get-Content. E come hai imparato finora, la natura degli array ti consente di operare sul contenuto un elemento alla volta.

Gli array funzionano spesso bene ma possono rendere più difficile la sostituzione delle stringhe. Il parametro Raw di Get-Content legge l’intero contenuto di un file in un singolo oggetto stringa. Sebbene il codice qui sotto sia lo stesso usato nel primo esempio, il parametro Raw memorizza il contenuto del file come una singola stringa.

Save the content into to a object
 $fruits = Get-Content .\fruits.txt -Raw
 Display the type of the object
 $fruits.GetType()
 Retrieve the count of items within the object
 $fruits.Count
 Output the contents of the object to the console
 $fruits

La schermata sottostante mostra che l’aggiunta del parametro Raw a Get-Content fa sì che il contenuto venga trattato come una singola stringa e non come un array di oggetti.

Confirming that the Raw parameter of Get-Content reads the file content as a single string object.

Una volta che hai il contenuto di un file in una singola stringa usando il parametro Raw, cosa puoi farci? Forse devi cercare e sostituire una stringa all’interno di quel file. Nell’esempio seguente, Get-Content legge il contenuto di un file come una singola stringa. Poi, utilizzando l’operatore replace, sostituisci una parola specifica con un’altra.

Correlato: Ricerca e Sostituzione di Stringhe

# Ottieni il contenuto grezzo del file di testo
$fruits = Get-Content .\fruits.txt -Raw
# Mostra il contenuto
$fruits
# Trova e sostituisci la parola 'albicocca' con 'mango'
$fruits -replace 'apricot','mango'
Reading the content of a text file as a single string and replacing a word using the replace operator.

Leggi solo il contenuto dai file corrispondenti a un filtro

Hai una cartella piena di file ma devi leggere solo il contenuto di alcuni selezionati? Con PowerShell Get-Content, non è necessario filtrare i file separatamente prima di leggerne i contenuti. Il parametro Filter di Get-Content limita quali file il cmdlet legge.

Per dimostrare la lettura del contenuto solo di alcuni file selezionati, prima, crea un paio di file da leggere. Come mostrato di seguito, crea i file nella tua cartella di lavoro usando Add-Content.

# Add-Content crea i file log1.log e log2.log se non esistono già e aggiunge il valore dato
Add-Content -Value "This is the content in Log1.log" -Path C:\demo\Log1.log
Add-Content -Value "This is the content in Log2.log" -Path C:\demo\Log2.log
# Verifica che i file siano stati creati
Get-ChildItem C:\demo
Creating test .log files using Add-Content.

Con i tuoi file di test creati, utilizza i parametri Filter e Path per leggere solo i file .log nella directory principale. L’asterisco utilizzato nella definizione del filtro indica a Get-Content di leggere qualsiasi file con estensione .log. L’asterisco finale del parametro del percorso limita la lettura dei file solo alla directory principale.

Get-Content -Path C:\demo* -Filter *.log

Come mostrato nell’output sottostante, viene visualizzato solo il contenuto dei file .log.

Using the Filter parameter with PowerShell Get-Content to limit the read files.

Correlato: Get-ChildItem: Elenca file, Registro, Certificati e altro come uno

Leggendo l’Alternate Data Stream di un file

Fino ad ora, hai lavorato esclusivamente con file di testo, ma Get-Content può leggere dati dall’Alternate Data Stream (ADS) di un file. Sentiti libero di approfondire gli studi sui flussi, ma puoi pensare a un flusso come a un altro attributo di dati memorizzato insieme ai tipici contenuti di un file.

Gli alternate data streams sono una caratteristica del sistema di file NTFS di Windows, quindi ciò non si applica a Get-Content quando usato con sistemi operativi non Windows.

Puoi visualizzare gli alternate data streams eseguendo Get-Item con il parametro Stream. Quando si fa riferimento a un file usando il parametro Stream, Get-Item restituisce una proprietà chiamata Stream, come mostrato di seguito. Questo stream di contenuto predefinito del file è rappresentato da :$DATA.

Per mostrare lo stream predefinito :$DATA, utilizza il cmdlet Get-Item per visualizzare tutti gli stream disponibili nel file fruits.txt. Come mostrato di seguito, Get-Item visualizza un singolo stream.

Get-Item -Path .\fruits.txt -Stream *
Listing all available streams in a file using Get-Item.

Il parametro Stream di Get-Content legge esplicitamente il contenuto dello stream predefinito :$DATA, come mostrato di seguito. Il contenuto restituito è lo stesso dell’output predefinito di Get-Content, poiché lo stream :$DATA viene letto per impostazione predefinita.

Get-Content -Path .\fruits.txt -Stream ':$DATA'
Explicitly reading the :$DATA stream using Get-Content.

Per dimostrare il recupero di uno stream dati alternativo utilizzando Get-Content, modifica un file utilizzando Add-Content per aggiungere il nuovo stream. Utilizza Get-Item per mostrare il nuovo stream insieme allo stream predefinito :$DATA, come visto nell’esempio qui sotto.

# Aggiungi un nuovo ADS chiamato Segreto al file fruits.txt
Add-Content -Path .\fruits.txt -Stream Secret -Value 'This is a secret. No one should find this.'
Get-Item -Path .\fruits.txt -Stream *
Adding the Secret alternate data stream using Add-Content and displaying the new stream with Get-Item.

Poiché solo lo stream :$DATA viene letto per impostazione predefinita, utilizza il parametro Stream di Get-Content per recuperare il nuovo contenuto dello stream Segreto. Come mostrato di seguito, il contenuto dello stream Segreto viene visualizzato al posto del contenuto predefinito del file.

Get-Content -Path .\fruits.txt -Stream secret
Using Get-Content to read the Secret alternate data stream content.

Prossimi Passaggi Con PowerShell Get-Content

In questo articolo, hai imparato molti modi per utilizzare Get-Content per leggere e manipolare contenuti. Hai persino appreso che Get-Content è abbastanza flessibile da leggere contenuti da stream di dati alternativi!

Con ciò che hai imparato in questo articolo, quali altri modi puoi utilizzare Get-Content nel tuo lavoro? Forse puoi utilizzare Get-Content per determinare se un file di backup è obsoleto e attivare una chiamata automatica per eseguire un lavoro di backup?

Source:
https://adamtheautomator.com/powershell-get-content/