2017-08-18 8 views
1

コンピュータ名に基づいて転送イベントでEventViewerからログを検索する必要があります。xPathクエリの制限と等しくない

私のクエリは、そのフィルタが動作を停止し、すべてのログが表示された後、私は1つの以上の条件

and [(Computer!='comp16')]) 

を追加しない限り、このクエリは正常に動作している

*[(System[(Computer!='comp1')]) and 
(System[(Computer!='comp2')]) and 
(System[(Computer!='comp3')]) and 
(System[(Computer!='comp4')]) and 
(System[(Computer!='comp5')]) and 
(System[(Computer!='comp6')]) and 
(System[(Computer!='comp7')]) and 
(System[(Computer!='comp8')]) and 
(System[(Computer!='comp9')]) and 
(System[(Computer!='comp10')]) and 
(System[(Computer!='comp11')]) and 
(System[(Computer!='comp12')]) and 
(System[(Computer!='comp13')]) and 
(System[(Computer!='comp14')]) and 
(System[(Computer!='comp15')])] 

のようなものです。 comp15の代わりにcomp16を入力するか、またはcomp12の代わりにすべてが正常に機能することに注意してください。だから問題は新しい状態ではない。私ははるかに大きいクエリで

(System[(Computer='comp1')]) or 
(System[(Computer='comp2')]) or 
... 
(System[(Computer='comp15')]) or 
(System[(Computer='comp16')]) and so on 

フィルターが正常に動作平等フィルタを使用する場合

状況は反対です。

なぜ、等価演算子は大きなクエリでは機能しませんか? EventRecordIDによって

EDIT

フィルターは同じ問題を抱えている

EDIT 2

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
<System> 
    <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" /> 
    <EventID>4624</EventID> 
    <Version>1</Version> 
    <Level>0</Level> 
    <Task>12544</Task> 
    <Opcode>0</Opcode> 
    <TimeCreated SystemTime="2017-08-18T17:06:15.595105400Z" /> 
    <EventRecordID>1</EventRecordID> 
    <Correlation /> 
    <Execution ProcessID="584" ThreadID="7100" /> 
    <Channel>Security</Channel> 
    <Computer>comp1</Computer> 
    <Security /> 
</System> 
<EventData> 
    <Data Name="TargetUserName">userName</Data> 
    <Data Name="TargetDomainName">DOMAIN</Data> 
    ... 
    <Data Name="ProcessName">-</Data> 
    <Data Name="IpAddress">-</Data> 
    <Data Name="IpPort">-</Data> 
</EventData> 
</Event> 
+0

XPathクエリは、15個以上の '!='条件で正常に動作するはずです...解析しようとしているログを使用し、使用するツールを共有します。回避策が必要な場合は、 ''システム[not(Computer =( 'comp1'、 'comp2' '、...)]] ' – Andersson

+0

@Andersson私はstandart EventViewerツールの" Filter Current Log "タブ" XML "を使用していますが、' EventLogWatcher'と 'EventLogQuery'クラスを使って' C# 'でプログラム的にやろうとしています。結果は同じです – ivanblin

答えて

0

あなたのXMLを示していないが、それは上のXML構造を想定するのは難しいですこのクエリは意味をなさない。

は考えてみましょう単純

*[(System[(Computer!='comp1')]) and 
    (System[(Computer!='comp2')])] 

1台のコンピュータのみで一つだけのシステムがある場合、コンピュータは、どちらも「COMP1」や「COMP2」の場合、これはtrueを返します。しかし、複数のシステムや複数のコンピュータが存在し、コンピュータがすべて同じ値でない場合、必然的に少なくとも1台のコンピュータは「comp1」ではなく、少なくとも1台は「comp1」ではなく、 comp2 'となり、述語は常に真になる。

通常、人々がXPathにA!=Bと書くときは、not(A=B)と書かれているはずです。

+0

私のXMLはstandart Windowsイベントログです(編集2参照) 私のクエリは15条件でうまく動作するが、正確に同じログのバッチをフィルタリングすると16以上では動作しない。 ところで、EventViewerのログフィルタには、演算子 'not()'、 '!='のみ、またはちょうど正しい方法がわからない – ivanblin

+1

あなたのXML要素は名前空間にあるので私はこれらのXPathクエリがどのように動作するかを見ていません。Ah:私はhttps://blogs.technet.microsoftでそれを参照してください。com/askds/2011/09/26/advanced-xml-filtering-in-the-windows-event-viewer /では、「Windows Event LogはXPath 1.0のサブセットをサポートしています」と言っています。まあ、それはそれのいくつかの独特の変形についてです。 –

+0

ここでXPathの方言に関する情報が見つかりました:https://msdn.microsoft.com/en-us/library/dd996910(VS.85).aspx#limitationsなぜ私は彼らが不適合カスタムXPathの実装はこの仕事のためだけですか? –

関連する問題