none
Get-wineventで部分文字列でフィルターするには RRS feed

  • 質問

  • Get-wineventについて質問です。

    以下のようなイベントログ(アプリケーションログです)
    + <System>
       (略)
      </System>
    - <EventData>
      <Data>JPQA-3256</Data>
      </EventData>
      </Event>
    に対して文字列"JPQA-3256"でフィルターするには
    Get-WinEvent -LogName Application -FilterXPath "*[EventData[Data='JPQA-3256']]"
    で出来ることは分かりました。が、部分文字列"JPQA-"でフィルターする方法が分かりません。

    実は、あるツールがXpathだけで条件を設定するようになっているため、別のコマンドに
    パイプで渡すというようなことができません。Xpathの指定だけで部分文字列を使って
    フィルターすることはできないのでしょうか?

    2015年10月2日 6:39

すべての返信

  • // 試していなくて恐縮ですが

    "*[EventData[starts-with(Data/text(), 'JPQA-')]]" …かな?

    2015年10月2日 7:22
  • XPath 1.0 limitationsによりposition、Band、timediff以外の関数は使用できないそうです。

    …となると無理かなぁ?

    • 回答としてマーク ucchii2015 2015年10月2日 9:07
    • 回答としてマークされていない ucchii2015 2015年10月2日 9:07
    2015年10月2日 7:28
  • ご回答、ありがとうございました。でも「クエリは無効です」となってしまいました。

    PS C:\Windows\System32\WindowsPowerShell\v1.0> Get-WinEvent -LogName Application -FilterXPath "*[EventData[starts-with(Data/text(), 'JPQA-')]]"
    Get-WinEvent : 指定されたクエリは無効です。
    発生場所 行:1 文字:1
    + Get-WinEvent -LogName Application -FilterXPath "*[EventData[starts-with(Data/tex ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Get-WinEvent], EventLogException
        + FullyQualifiedErrorId : System.Diagnostics.Eventing.Reader.EventLogException,Microsoft.PowerShell.Commands.GetWinEventCommand

    Get-winevent で starts-with とか text と言った関数を使えるのでしょうか?

    2015年10月2日 8:31
  • 佐祐理さま

    ご回答ありがとうございました。

    「XPath 1.0 limitations」確認しました。無理っぽいですね。残念ですがあきらめます。ニーズはあると思うのですが…。

    アメリカ(?)でも、こんなのがありました。

    ://stackoverflow.com/questions/10253954/how-can-i-filter-windows-events-retrieve-with-an-xpath-where-a-certain-value-is

    (何か「リンクは投稿できない」というエラーになってしまいましたので頭の「http」を削ってみました。)

    2015年10月2日 9:16