Quando mi trovo a dover analizzare un file di testo, un txt o un log, molto lungo che contiene centinaia, se non migliaia, di righe, spesso e volentieri mi perdo qualche pezzo importante e così non capisco perché è fallita l'installazione di un programma o perché si è generato un errore nel sistema. Inoltre aprire con Notepad dei file di testo di dimensioni molto grandi può essere lento e pesante (ci sarebbe Notepad++ ma in ufficio non è sempre permesso installare e usare programmi di terze parti così mi devo arrangiare con Notepad).
PowerShell mi viene in aiuto per fare una ricerca veloce di una determinata stringa, estrarla e creare dei file più ridotti che contengono solo quello che mi interessa.
Select-String
Il primo cmdlet che possiamo usare è Select-String, in -Path va indicato il percorso e il nome del file da analizzare e nel -Pattern la stringa da cercare. Possiamo mostrare il risultato a video, con evidenziato il testo cercato, subito dopo il nome del file è indicato il numero della riga nel file:
Select-String -Path d:\mwdr.log -Pattern 'Windows'
Se invece di mostrare risultato a video volessimo creare un file di testo più ridotto, che contiene solo le righe dove la stringa è presente, basta aggiungere il cmdlet out-file:
Select-String -Path d:\mwdr.log -Pattern 'Windows' | out-file -filepath d:\EstrattoLog.txtPotrebbe anche solo interessarci sapere se il file contiene la stringa cercata, per esempio l'esito di un backup dati o l'esecuzione di un comando, così possiamo cercarla e mostrare a video se è presente o meno.
$Cerca = Select-String -Path 'd:\MWDR.log' -Pattern 'TurboLab'if ($Cerca -ne $null) {echo "Il file contiene la stringa indicata"} else {echo "Il file non contiene la stringa indicata"}

Get-Content
Utilizzando il cmdlet Get-Content in combinazione con Select-String, possiamo ottenere una estrazione con qualche dato in meno, rispetto ai comandi precedenti, ma sicuramente più leggibile:
Get-Content -Path d:\mwdr.log | Select-String -Pattern "TurboLab"
Ricerca su più file
Il cmdlet Get-ChildItem permette la ricerca della stringa indicata in -Pattern in tutti i file .TXT e .LOG presenti nella cartella presente in -Path:
Get-ChildItem -Path D:\Ricerca\ -Recurse | Select-String -Pattern 'TurboLab'
Se vogliamo fare una ricerca della stringa "Microsoft" in tutti i file di testo presenti nella cartella C:\Windows\System32, e in tutte le sotto cartelle presenti, va aggiunta l'opzione -Recurse:
Get-ChildItem -Path C:\Windows\System32\*.txt -Recurse | Select-String -Pattern 'Microsoft' 