Searching and Logging..using Powershell ….sure !!!!!


 

Pessoal,

Esses dias um amigo precisou de um procedimento e nós resolvemos usando powershell.

Qual era o problema ?..

Ele tinha um determinado path com vários arquivos txt. Ele tinha que achar nos txts que tivessem o lastwritetime do arquivo em determinado período , uma string dentro dos txt e logar o nome do arquivo e a linha inteira.

Algo como, passando duas datas e a string , procurar nos arquivos com ultima alteração entre estas datas, esta string. E jogar para um txt o resultado disso tudo.

Parece complicado, mas no powershell é simples demais :

Vamos lá..eu criei dois arquivos txts pra exemplificar :

File1.txt com este conteúdo :

111111111111111111111111111
222222222222222222222222222
33333Error33333333333333333
444444444444444444444444444
Error5555555555555555555555
666666666666666666666666666
777777777777777777777777777
8888888888888888888888Error

E file2.txt com este conteúdo :

111111111111111111111111111
222222222222222222222222222
33333Error33333333333333333
444444444444444444444444444
Error5555555555555555555555
666666666666666666666666666
777777777777777777777777777
8888888888888888888888Error
999999999999999999999999999
100000000000000000000000000
AAAAAAAAAAAAAAAAAAAAErrorAA
BBBBBBBBBBBBErrorBBBBBBBBBB
CCCCCCCCErrorCCCCCCCCCCCCCC

Voçês podem perceber que em negrito esta a palavra Error, que é a string que eu quero procurar. Vamos para o código :

   1:  
   2: function Invoke-AdmErrors
   3:  
   4: {
   5:     <#
   6:     .SYNOPSIS
   7:     Search for errors in files
   8:     .DESCRIPTION
   9:     Search for errors in files
  10:     .INPUTS
  11:     Pipe Path to files
  12:     .OUTPUTS
  13:     Flat file with files finded
  14:     .EXAMPLE
  15:  
  16:     Invoke-AdmErrors c:\temp '01/01/2010' '01/31/2010' c:\temp\result.txt (this name you can change. default is "c:\temp\result.txt" )
  17:         
  18:     c:\temp  | Invoke-AdmErrors '01/01/2010' '01/31/2010' c:\temp\result.txt (this name you can change. default is "c:\temp\result.txt" )
  19:  
  20:     #>
  21:     
  22:     
  23:     param (
  24:             [Parameter(Position=0, Mandatory=$true, ValueFromPipeline = $true)] [String] $Path,
  25:             
  26:             [Parameter(position=1,Mandatory = $true )]
  27:             [system.DateTime]     $InitialDate ,
  28:             
  29:             [Parameter(position=2,Mandatory = $true )]
  30:             [system.DateTime]     $FinalDate ,
  31:             
  32:             [Parameter(position=3,Mandatory = $true )]
  33:             [String]     $SearchFor ,
  34:             
  35:             [Parameter(position=4,Mandatory = $false )]
  36:             [string]     $ResultFile = "c:\temp\result.txt"
  37:             
  38:             
  39:             
  40:           )
  41:             Process
  42:             {
  43:                 Get-ChildItem $path | Where-Object {$_.lastwritetime -ge $InitialDate -and $_.lastwritetime -le $FinalDate } |  foreach {
  44:                     Select-String -Pattern $SearchFor -Path $_ -AllMatches | Add-Content -Path $ResultFile -Force
  45:                 }
  46:             }
  47: }

E para rodar :

   1: Invoke-AdmErrors -Path c:\temp -Initialdate '01/01/2010' -FinalDate '12/31/2010' -SearchFor "Error" -ResultFile c:\temp\result.txt

Procurando ppor “Error” em todos os arquivos da pasta c:\temo, com ultima alteração do arquivo entre 01/01/2010 a 31/12/2010 e jogar o resultado pro arquivo c:\temp\result.txt

Olha o resultado do arquivo result.txt

image

Exibindo o nome do arquivo, numero da linha e a linha inteira com a string procurada.

Fantástico não ?

POWERSHELL ROCKS !!!!!

“If you only knew
I’m hanging by a thread
The web I spin for you
If you only knew
I’d sacrifice my beating
Heart before I lose you
I still hold onto the letters
You returned
I swear I’ve lived and learned

It’s 4:03 and I can’t sleep
Without you next to me I
Toss and turn like the sea
If I drown tonight, bring me
Back to life
Breathe your breath in me
The only thing that I
still believe
In is you, if you only knew”

If You Only Knew

Shinedown

About Laerte Junior

Laerte Junior Laerte Junior is a SQL Server specialist and an active member of WW SQL Server and the Windows PowerShell community. He also is a huge Star Wars fan (yes, he has the Darth Vader´s Helmet with the voice changer). He has a passion for DC comics and living the simple life. "May The Force be with all of us"
This entry was posted in Powershell. Bookmark the permalink.

2 Responses to Searching and Logging..using Powershell ….sure !!!!!

  1. Felipe says:

    Tenho que aprender Powershell logo viu,esse trem é muito massa !!!Valeu Laerte,mto útil.

  2. Laerte says:

    Loco o treco né haahha..Valeu velhinho 🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s