syslogを受信できるログサーバーをwindowsで作ったのですが
短時間に大量に出力されるログをPowershellコマンドレットで処理するとかなり処理が遅くなるうえ、出力されずに処理が飛ばされることがあるので、コマンドレットではなく.net frameworkで処理しました
$file = New-Object System.IO.StreamWriter("C:\logserver\logtest.log", $false, [System.Text.Encoding]::GetEncoding("unicode")) while($true) ` { if($Udp.Available) ` { $Buffer = $Udp.Receive([ref]$Sender) $MessageString = [Text.Encoding]::UTF8.GetString($Buffer) $file.WriteLine("$MessageString") } }
最低限の機能だとこんな感じです。コマンドレットを使わないなら機能をいろいろ追加しても大丈夫だと思います。
コマンドレットはめっちゃ遅いらしいので処理速度に気を付けるスクリプトは.net frameworkを使いたいです
余談ですが1日ごとに分けたい場合などは、whileのあとに[datetime]Nowなどを入れてif文を追加してやると良いと思います