none
PowerShell и Get-WinEvent RRS feed

  • Вопрос

  • Добрый день.

    Есть необходимость получить из журналов контроллера домена все события по списку ID, но вот есть проблема - при использовании в запросе около 23 ID - запрос работает, как только добавляю 24 или более-  "Get-WinEvent : Не удалось найти события, соответствующие указанному условию выбора."

    Вот сам запрос:

    [int32[]]$ID = @(4720..4730)
    $filter = @{Logname='Security';
                ID=$ID;}

    Get-WinEvent -oldest -ComputerName $_.name -Credential $cred  -FilterHashtable $filter

    Так работает, если диапазон задам более ([int32[]]$ID = @(4720..4760)) - не работает.



    • Изменено Ilin Sergey 28 марта 2016 г. 14:12
    28 марта 2016 г. 14:11

Ответы

  • Тогда, последний вариант с xml, т.к. на уровне API:

    If the XPath expression is a compound expression that contains more than 20 expressions or you are querying for events from multiple sources, then you must use a structured XML query.

    Выполняется функция EvtQuery у которой параметр:

    Query [in]

    A query that specifies the types of events that you want to retrieve. You can specify an XPath 1.0 query or structured XML query. If your XPath contains more than 20 expressions, use a structured XML query. To receive all events, set this parameter to NULL or "*".

    $Id1 = ((4720..4730 | % { "EventID=$_"}) -join ' or ')
    $Id2 = ((4731..4740 | % { "EventID=$_"}) -join ' or ')
    $Id3 = ((4741..4750 | % { "EventID=$_"}) -join ' or ')
    $Id4 = ((4751..4760 | % { "EventID=$_"}) -join ' or ')
    $xml = @"
    <QueryList>
      <Query Id="0" Path="Security">
        <Select Path="Security">*[System[$Id1]] </Select>
    	<Select Path="Security">*[System[$Id2]] </Select>
    	<Select Path="Security">*[System[$Id3]] </Select>
      </Query>
    </QueryList>
    "@
    
    Get-WinEvent -FilterXml $xml
    

    • Помечено в качестве ответа KazunEditor 30 марта 2016 г. 4:39
    28 марта 2016 г. 15:05
    Отвечающий

Все ответы

  • А если Xpath:

    Get-WinEvent -FilterXPath "*[System[EventID >= 4720 and EventID <= 4760]]" -LogName Security

    • Изменено KazunEditor 28 марта 2016 г. 14:27
    28 марта 2016 г. 14:26
    Отвечающий
  • Работает, но долго. По времени примерно аналогично ..... | where {(id -eq '4720') -or (id -eq '4721') и т.д.}
    • Изменено Ilin Sergey 28 марта 2016 г. 14:34
    28 марта 2016 г. 14:34
  • Тогда, последний вариант с xml, т.к. на уровне API:

    If the XPath expression is a compound expression that contains more than 20 expressions or you are querying for events from multiple sources, then you must use a structured XML query.

    Выполняется функция EvtQuery у которой параметр:

    Query [in]

    A query that specifies the types of events that you want to retrieve. You can specify an XPath 1.0 query or structured XML query. If your XPath contains more than 20 expressions, use a structured XML query. To receive all events, set this parameter to NULL or "*".

    $Id1 = ((4720..4730 | % { "EventID=$_"}) -join ' or ')
    $Id2 = ((4731..4740 | % { "EventID=$_"}) -join ' or ')
    $Id3 = ((4741..4750 | % { "EventID=$_"}) -join ' or ')
    $Id4 = ((4751..4760 | % { "EventID=$_"}) -join ' or ')
    $xml = @"
    <QueryList>
      <Query Id="0" Path="Security">
        <Select Path="Security">*[System[$Id1]] </Select>
    	<Select Path="Security">*[System[$Id2]] </Select>
    	<Select Path="Security">*[System[$Id3]] </Select>
      </Query>
    </QueryList>
    "@
    
    Get-WinEvent -FilterXml $xml
    

    • Помечено в качестве ответа KazunEditor 30 марта 2016 г. 4:39
    28 марта 2016 г. 15:05
    Отвечающий
  • Спасибо, но ни как не могу понять как добавить еще условие по времени в этот XML запрос. Нужно выбрать события позднее указанной даты и времени.

    Пробую вот так, добавляя новую строку в $XML

    <Select Path="Security">*[System[TimeCreated[timediff(@SystemTime) >=$startdate]]] </Select>

    Подскажите? Спасибо.


    • Изменено Ilin Sergey 29 марта 2016 г. 7:11
    29 марта 2016 г. 7:09
  • *[System[(EventID=63) and TimeCreated[timediff(@SystemTime) &gt;= 3600000]]]
    &gt;= - >= ; &lt;= <=
    29 марта 2016 г. 7:32
    Отвечающий
  • Спасибо.

    Еще один возможно глупый вопрос, но как вычислить разницу в секундах, которая используется в запросе xml, между текущей датой и датой сохраненной в текстовом файле.

    29 марта 2016 г. 9:05
  • [long](New-TimeSpan (Get-Date 1.1.1950) (Get-Date)).TotalMilliseconds
    29 марта 2016 г. 9:11
    Отвечающий
  • Огромное спасибо.
    29 марта 2016 г. 9:18