1

Power Shellを使用してイベントログファイル(.evtx)をxmlに変換しようとしています(後でC#プログラムでこのxmlを読み取ります)。スクリプトを実行しています

get-winevent -Path "C:\test.evtx" -oldest | convertto-xml -as Stream > "C:\test.xml"

しかし、結果のxmlファイルには、「メッセージ」フィールドがEMPTYである多くのイベントが含まれています。Windowsイベントビューアで同じ.evtxを開くと、すべてのイベントのメッセージが表示されます。

この問題が報告され、人々はそれについて話しましたが(ここここ)、私はこれに対する解決策/回避策を見つけることができません。

この問題に関して何か新しいものが利用できるかどうか、または役立つかもしれない情報があれば、誰か教えてください。

PS:PowerShellバージョン2.0を使用しています。

4

3 に答える 3

1

PS > xml のイベントログを C# のプロセスに読み込みたいとおっしゃっていました。私はC#で.evtxファイルを直接読んでいます:

class Program
    {
        static IEnumerable<EventLogRecord> LogRecordCollection(string filename, string xpathquery = "*")
        {
            var eventLogQuery = new EventLogQuery(filename, PathType.FilePath, xpathquery);

        using (var eventLogReader = new EventLogReader(eventLogQuery))
        {
            EventLogRecord eventLogRecord;

            while ((eventLogRecord = (EventLogRecord)eventLogReader.ReadEvent()) != null)
                yield return eventLogRecord;
        }
    }

    static void Main(string[] args)
    {
        var path = "file.evtx";
        var start = new DateTime(2013, 06, 26, 0, 0, 0);
        var end = new DateTime(2013, 06, 27, 0, 0, 0);
        var t = from l in LogRecordCollection(path)
               where l.TimeCreated > start
               && l.TimeCreated < end
               select l;
        foreach (var item in t)
        {
            var msg = item.Properties[0].Value.ToString();
            if (msg.Contains("[interesting key]"))
            {
                Console.Write(item.TimeCreated);
                Console.Write(";");
                Console.Write(item.TaskDisplayName);
                Console.Write(";");
                Console.Write(item.ProviderName);
                Console.Write(";");

                Console.Write(msg);
                Console.Write(";");
                Console.WriteLine();
            }

        }
        Console.Read();
    }
}
于 2013-08-06T14:54:15.450 に答える
0

これを試してみて、それがどのように機能するか教えてください。 $Objects = get-WinEvent -Maxevents 10 |ConverTo-XML -NoTypeInformation $objects.Object|Select -ExpandProperty Property

編集:申し訳ありませんが、「ファイルに入れたい」ということを忘れていました...

$Objects = get-WinEvent -Maxevents 10 |ConverTo-XML -NoTypeInformation -as ストリーム > C:\Test.xml

于 2013-01-30T20:18:54.600 に答える