Formazione e Tecnologia
Ricerca di parole chiave in file di tracciamento complessi.

Ricerca di parole chiave in file di tracciamento complessi.

Nel corso della giornata digitale può essere necessario raccogliere informazioni su specifiche situazioni e l’unica strada per farlo è analizzare corpulenti file di tracciamenti alla ricerca di specifiche parole. La necessità può essere legata a tante altre situazioni che necessitano di individuare specifiche stringhe di testo in specifici file di testo.

Nel corso degli anni ci siamo trovati a scrivere di volta in volta delle procedure di estrazione all’interno dei singoli script realizzati per avere allarmi o innescare altre procedure, fino a quando abbiamo iniziato a muoverci con le funzioni e i moduli di Powershell.

Il risultato finale è una funzione inserita in un modulo Powershell installato sui computer e specializzato nell’estrapolazione di contenuti specifici in file testuali o in output complessi di altri programmi o dello stesso Powershell.

Oggi abbiamo deciso di estrarre una di queste funzioni di base dal suo modulo e condividerne il funzionamento, che in futuro sarà necessario per altri contenuti che stiamo per rilasciare.

Tabella dei Contenuti

Obiettivo della funzione di ricerca

Per le tipiche finalità da noi utilizzate è frequente la ricerca di parole o frasi chiave in un file di tracciamento di un programma, al fine di isolare alcuni stati del suo funzionamento, come ad esempio avere una segnalazione se un backup BCDR è in esecuzione da un tempo superiore a quanto stimato. Per eseguire tale controllo è necessario sapere quando il salvataggio è iniziato e da quanto tempo è in esecuzione.

Nel corso di queste tipologie di ricerche può anche essere utile conoscere il numero di volte in cui la stringa si ripete nel testo analizzato.

LEGGI ANCHE -  Creazione e rimozione di VPN Microsoft

Per sapere cosa cercare è fondamentale un’analisi del testo su cui svolgere i controlli, per comprenderne la struttura e la sintassi.

La funzione Search-String analizza il contenuto di un buffer, che può essere un file letto con il cmdlet Get-Content, cercando al suo interno il contenuto di un pattern di testo.

L’elaborazione da eseguire potrebbe richiede un range di righe precedenti e/o successive rispetto alla stringa cercata; pertanto, l’inserimento di due parametri permette di specificare anche queste opzioni.

Per finire tre parametri di tipo switch attivano la possibilità di estrapolare solo la prima e/o l’ultima occorrenza della stringa cercata o il solo contatore di quante volte la ricorrenza si è ripetuta.

function Search-String {

  param ()

  …

}

I parametri della funzione

La volontà di accorpare in un’unica funzione più modalità di ricerca ha reso necessario escogitare una struttura di parametri che ne rendesse possibile la flessibilità, sfruttando per quanto possibile dei valori di default per evitarne la compilazione se non strettamente necessaria. Un altro elemento imprescindibile era arrivare ad una funzione il quanto più compatta in termini di righe di codice.

				
					  param (
    [Parameter(Mandatory=$true,Position=0,HelpMessage="Testo da analizzare.")][AllowEmptyString()][string[]]$FBuffer,
    [Parameter(Mandatory=$true,Position=1,HelpMessage="Testo da cercare.")][string]$FPattern,
    [string]$FBefore=0,
    [string]$FAfter=0,
    [switch]$FFirst,
    [switch]$FLast,
    [switch]$FOnlyCount
  )

				
			

I due parametri sempre necessari sono il contenuto da analizzare (FBuffer) e il pattern da cercare (FPattern), pertanto entrambi sono contrassegnati come obbligatori (Mandatory=$true).

Per determinare quante righe precedenti e/o successive alla ricerca devono essere visualizzate, sono adottati due parametri (FBefore e FAfter), che hanno un valore di default impostato a zero, se questi parametri non sono esplicitati assumono valore zero e restituiscono la sola riga che contiene il valore cercato.

LEGGI ANCHE -  Usare Powershell per cercare le regole del firewall

Gli ultimi tre parametri sono di tipo switch, questi parametri assumono il valore true se presenti e false se non usati. I parametri FFirst e FLast forzano la visualizzazione della prima e dell’ultima ricorrenza della stringa cercata. Il parametro FOnlyCount forza la visualizzazione del solo contatore di occorrenze trovate.

La ricerca dei contenuti sulla base dei parametri

Lo scopo della funzione è individuare una stringa nel contenuto da analizzare; pertanto, la prima operazione svolta è la sua individuazione ed il suo isolamento, in questa operazione viene in aiuto il cmdlet Select-String, che permette di estrapolare anche i contenuti a contorno della stringa cercata. Il contenuto del buffer viene passato al cmdlet attraverso una pipeline.

				
					  $FResult = $FBuffer | Select-String -Pattern $FPattern -CaseSensitive -SimpleMatch -Context $FBefore,$FAfter
  $Count = $FResult.Count
  if ($FOnlyCount) {
    Return $Count
  }

				
			

L’output della ricerca della Riga 1 è un array, questo rende possibile determinare immediatamente alla Riga 2 il numero di occorrenze individuate. Noto il valore della ripetizione della stringa cercata, le Righe da 3 a 5 lo restituiscono chiudendo la funzione se il parametro FOnlyCount è presente, quindi true.

Arrivati a questo punto avremmo già a disposizione le sezioni del buffer che contengono quanto cercato, ma procediamo andando a sviluppare i filtri richiesti dai parametri.

Le condizioni di ricerca

Con l’istruzione Switch analizziamo il valore del parametro FFirst, che può valore solo true o false, le condizioni dell’istruzione lo compareranno insieme al parametro FLast, che a sua volta può valere solo true o false. La comparazione di questi due parametri rende possibile generare i diversi output richiesti:

  • prima occorrenza e contatore totale (Righe 2-4);
  • ultima occorrenza e contatore totale (Righe 5-7);
  • prima e ultima occorrenza e contatore totale (Righe 8-13);
  • tutte le occorrenze e contatore totale (14-16).
LEGGI ANCHE -  Nel RMM il monitor non è solo un monitor
				
					  switch ($FFirst) {
    { $_ -and !($FLast) } {
      Return $FResult['0'], $Count
    }
    { !($_) -and $FLast } {
      Return $FResult[$FResult.Count - 1], $Count
    }
    { $_ -and $FLast } {
      $Res = @("","")
      $Res['0'] = $FResult['0']
      $Res['1'] = $FResult[$FResult.Count - 1]
      Return $Res, $Count
    }
    Default {
      Return $FResult, $Count
    }
  }

				
			

Per maggiori informazioni sull’uso e la realizzazione degli script di automazione leggi questo articolo e contattaci senza impegno.

I componenti distribuiti sono forniti senza alcuna garanzia. Non vi sono garanzie che il software soddisfi le vostre esigenze o sia esente da errori. In nessun caso gli sviluppatori saranno responsabili per eventuali danni.

I componenti proposti sono stati collaudati nel modo più esaustivo possibile e sono utilizzati in modo regolare in ambienti di produzione, durante il loro utilizzo non si sono verificate anomalie di funzionamento.

Archivi
Prossimi eventi

Non ci sono eventi imminenti.

Iscriviti alla nostra Newsletter
Seleziona lista (o più di una):
Manteniamo i tuoi dati privati e NON li condividiamo con terze parti. Per maggiori informazioni, consulta la nostra Privacy Policy.
Confermo di aver letto la Policy sul trattamento dei dati
Il misticismo della Tuscia e le curatrici

Un progetto parallelo ambientato nella Tuscia Sutrina: piante da giardino locali, tecniche di coltivazione, storia e leggende del territorio, racconti fantasy a tema. Botanica, cultura e tradizioni in un unico spazio.

A volte basta una breve pausa per ritrovare la concentrazione: qualche minuto tra verde e fantasia può aiutare a tornare al lavoro con nuove idee.

Visita il sito