2016-10-26 16 views
0

ログファイルを解析して、フォーマットされた結果を出力しようとしました。
結果ファイルが作成されますが、スクリプトを実行した後は空です。ログファイル(カラムのカスタム名)の解析

ソースログファイル:

2011-07-08 14:34:40.609 Ber 8 [R: 1] Http -> GET http://test.com:80/api/test?__crd=78F5WE6WE 
2011-08-08 12:34:51.202 Inf 9 [R: 1] Http <~ GET http://TEST.com:80/api/gs?__crid=7B9790431B8 [304 Not Modified] [11.774 ms] 
2011-08-08 15:38:52.166 War 8 [R: 33] [Excn][Type:Api][Err:300][HTTPStatus:NotFound][Message:PCNDLS_. ISE Account : 111][CorrId:hvukyhv78r5564] 

out format

Write-Host 'Hello! My Name is test !' 

$Files = Get-ChildItem C:\log\1\* -Include *.log 

New-Item -ItemType file -Path C:\log\result.txt –Force 

foreach ($File in $Files) 
{ 
    $StringMatch = $null 
    $StringMatch = select-string $File -pattern "[Exception]|[304 Not Modified]" 
    if ($StringMatch) {out-file -filepath C:\log\result.txt -inputobject $StringMatch } 

    $regex = 'Line\s+(\d+):\s+([^;]+);([^;]+);([^;]+);(.+)' 
    [regex]::Matches($StringMatch, $regex) | ForEach-Object { 
     [PsCustomObject]@{ 
      ID = $_.Groups[1].Value 
      Time = $_.Groups[2].Value 
      Status = $_.Groups[3].Value 
      URL = $_.Groups[4].Value 
      Message = $_.Groups[5].Value 
     } 
    } 
} 
+0

':

$regex = 'Line\s+(\d+):\s+([^;]+);([^;]+);([^;]+);(.+)' $pat = "\[Exception\]|\[304 Not Modified\]" $path = "C:\log\1\*.log" $file = "C:\log\result.txt" Remove-Item $file -ErrorAction SilentlyContinue Get-ChildItem $path | Select-String -Pattern $pat | Select -ExpandProperty line | % { $_ | Add-Content $file # Add code to create object here } 

それとも、あなただけのこの操作を行うことができ、オブジェクトを必要としないID:下記の例を試してみてください\ [Except \] | \ [304 Not Modified \] "'それぞれの反復で結果を上書きする: '-Append'を使うかもしれないswitch ...とにかく、ブレークポイントを設定してコードをステップ実行して、PowerShell ISEでスクリプトをデバッグし、変数を調べます。 – wOxxOm

+0

ソースログには '305 not modified'と表示されますが、あなたのコードは' 304 not modified'を探します。 'foreach(){}'はパイプラインに出力しません。出力を放棄します。あなたのコードはログ内の1行を探しますが、必要な出力には前の行の 'crd'情報が必要であり、' HTTPStatus'と 'Message'は後続行から' [Select-String -Context' ](https://technet.microsoft.com/library/hh849903.aspx)、生成するMatchInfoオブジェクトの.Contextプロパティを参照してください。 wOxxOm 感謝@ – TessellatingHeckler

+0

が、wOxxOm @多分私のフィルタが間違っているこの((TessellatingHeckler 感謝@ –

答えて

1

私はあなたの検索パターンとの問題があると思いますが、一般的に、あなたは物事の自然なPowerShellの道と戦っているようです。あなたがパイプラインのアプローチを使用する場合、あなたの人生はずっと楽になります。 `間違った正規表現で| "[304を修正しません] [例外]"

Get-ChildItem $path | Select-String -Pattern $pat | Select -ExpandProperty line | Add-Content $file 
+0

とどのようにフィルタを追加しますか? –

+0

フィルター何のために? –

関連する問題