2016-08-17 17 views
2

私はインターネット履歴を取得するpowershellスクリプトを持っており、データをlogstashに送信したいと思います。このようになり、データを返すLogstashは手動改行なしでjsonデータを解析できません

function ConvertTo-logstash 
{ 

    Begin { 
     $result = "" 
    } 
    Process {    
      $result += $_ | ConvertTo-Json -Compress -Depth 1    
      $result += "`n" 
    } 
    end { 
    $result.replace("\","\\") 
    } 

} 

は:関数は、この関数にPSObjectsの配列、Iパイプを返す

{"Browser":"IE10/11","Category":"internethistory","Function":"inethistory","HostIP":"172.16.100.93","HostName":"wkst-7-2","LastVisitTime":"2016-08-01T16:27:13","Title":"","URL":"res://C:\\Windows\\system32\\mmcndmgr.dll/views.htm","User":"scrub","VisitCount":2} 
{"Browser":"IE10/11","Category":"internethistory","Function":"inethistory","HostIP":"172.16.100.93","HostName":"wkst-7-2","LastVisitTime":"2016-08-02T14:33:26","Title":"","URL":"file:///C:/Users/scrub/Desktop/privEsc.ps1","User":"scrub","VisitCount":1} 
{"Browser":"IE10/11","Category":"internethistory","Function":"inethistory","HostIP":"172.16.100.93","HostName":"wkst-7-2","LastVisitTime":"2016-08-15T10:24:38","Title":"","URL":"file:///C:/Users/scrub/Documents/template.pdf","User":"scrub","VisitCount":22} 
... 

私はこの情報をファイルに書き込み、その後、私はこのデータを送信しますソケット接続を介してログをとる。問題は、jsonが無効であり、インデックスフィールド "Category"が小文字でなければならないことを示す、このデータのログシュートです。メモ帳でファイルを開き、最初のエントリの後に改行を入れて送信すると、logstashはそれをうまく処理します。私はメモ帳に改行を入れてはやっていたことを変更、ない運があったよう

$result += "`r`n" 

$result += "`n" 

を変えてみました。 Logstashはなぜこのデータを何の理由もないとしているのですか?

編集:改行の追加は関係ありません。メモ帳で開いて変更せずに保存するだけで、エラーを修正するようです。現在のところ、ファイルのバイナリを調べてその違いを見いだしています。

+0

おそらくそれを開いて変更して保存することは、行末の文字を変更する以上のことです。ファイルエンコーディング? ASCIIエンコーディングが期待されていて、UTF-16(たとえば)を送信している場合は、かなり問題になります。 –

+0

データをファイルに出力する方法を教えてください –

+0

'get-inethistory | convertto-logstash >> "$ outpath \ internethistory.log" ' – Sandles

答えて

1

あなたが収集しているデータは持っていないことを確認しますその中のnullバイト。 Logstashは、nullバイトが入っているエントリで何をすべきか分かりません。メモ帳はnullバイトをスペースとして解釈し、保存するとnullバイトをスペースで置き換えます。これが問題であれば、変更しないでメモ帳に保存するだけで効果が出る理由を説明します。

乾杯!

0

リダイレクト演算子(>>>)のデフォルトは "Unicode"エンコーディング形式(UTF16-LE)です - 私が知る限り、logstashは入力ASCIIまたはUTF8エンコードを想定しています。

代わりに使用Set-ContentまたはOut-File、両方Encodingパラメータをサポート:

Get-InetHistory |ConvertTo-Logstash |Out-File internethistory.log -Encoding UTF8 

(またはそれが失敗した場合)を

Get-InetHistory |ConvertTo-Logstash |Out-File internethistory.log -Encoding ASCII 
+0

私はこれを試しましたが、エンコーディングは無事でした。私はutf8とasciiを試してみましたが、どちらもUnicodeバージョンと同じ動作をしていました – Sandles

+0

これは非常に興味深いものです。ファイル内でバイナリの違いを見つけられることを楽しみにしています –

+0

@Philthecasualの示唆したように、良いバージョンのスペースに置き換えられました。 – Sandles

関連する問題