none
Get-WinEvent -FilterXmlの終端記号について

    質問

  • 以下の処理をISEで実行したところ、下線の「終端記号がありません」のエラーがでます。

    恐らく、以下の命令文が終了していないと、見なされているようなんですが、対応方法について、ご教示いただけないでしょうか。

    Get-WinEvent -FilterXml '
    "<QueryList>
      <Query Id='0' Path='System'>
        <Select Path='System'>*[System[(EventID=7001 or EventID=7002)]]</Select>
      </Query>
    </QueryList>"

    文字列に終端記号 ' がありません。
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

     
    2018年3月27日 13:23

回答

  • Here-Stringを使うのが楽です。変数展開を行いたい場合は @"<改行> ~ <改行>"@、行わない場合は @'<改行> ~ <改行>'@ の2種類が用意されています。この書式の利点は文字列内に " や ' をエスケープ無しで書けることにあります。

    Get-WinEvent -FilterXml @'
    <QueryList>
      <Query Id='0' Path='System'>
        <Select Path='System'>*[System[(EventID=7001 or EventID=7002)]]</Select>
      </Query>
    </QueryList>
    '@
    2018年3月28日 0:54
  • デバッグしました。

    Get-WinEvent -FilterXml ' ←最後のシングルコーテーションの記載が、誤りです。

    上記を消して、以下のように直すことで動作するようになります。
    いづれも、-FilterXml オプションに渡す値を、次の行から開始するのではなく、続けて記載することで、認識するようになります。

    Get-WinEvent -FilterXml "<QueryList>
      <Query Id='0' Path='System'>
        <Select Path='System'>*[System[(EventID=7001 or EventID=7002)]]</Select>
      </Query>
    </QueryList>"

    または、

    Get-WinEvent -FilterXml "
    <QueryList>
      <Query Id='0' Path='System'>
        <Select Path='System'>*[System[(EventID=7001 or EventID=7002)]]</Select>
      </Query>
    </QueryList>"

    または、

    $filterXml = "<QueryList>
      <Query Id='0' Path='System'>
        <Select Path='System'>*[System[(EventID=7001 or EventID=7002)]]</Select>
      </Query>
    </QueryList>"


    Get-WinEvent -FilterXml $filterXml

    2018年3月27日 15:26

すべての返信

  • デバッグしました。

    Get-WinEvent -FilterXml ' ←最後のシングルコーテーションの記載が、誤りです。

    上記を消して、以下のように直すことで動作するようになります。
    いづれも、-FilterXml オプションに渡す値を、次の行から開始するのではなく、続けて記載することで、認識するようになります。

    Get-WinEvent -FilterXml "<QueryList>
      <Query Id='0' Path='System'>
        <Select Path='System'>*[System[(EventID=7001 or EventID=7002)]]</Select>
      </Query>
    </QueryList>"

    または、

    Get-WinEvent -FilterXml "
    <QueryList>
      <Query Id='0' Path='System'>
        <Select Path='System'>*[System[(EventID=7001 or EventID=7002)]]</Select>
      </Query>
    </QueryList>"

    または、

    $filterXml = "<QueryList>
      <Query Id='0' Path='System'>
        <Select Path='System'>*[System[(EventID=7001 or EventID=7002)]]</Select>
      </Query>
    </QueryList>"


    Get-WinEvent -FilterXml $filterXml

    2018年3月27日 15:26
  • Here-Stringを使うのが楽です。変数展開を行いたい場合は @"<改行> ~ <改行>"@、行わない場合は @'<改行> ~ <改行>'@ の2種類が用意されています。この書式の利点は文字列内に " や ' をエスケープ無しで書けることにあります。

    Get-WinEvent -FilterXml @'
    <QueryList>
      <Query Id='0' Path='System'>
        <Select Path='System'>*[System[(EventID=7001 or EventID=7002)]]</Select>
      </Query>
    </QueryList>
    '@
    2018年3月28日 0:54
  • 分かりました。

    解説本の色々なところに書かれていることが繋がりました。

    問題は解決しました。

    有難うござい。

    2018年3月28日 7:52