get-winevent: работа со свойствами
Я пытаюсь изучить PowerShell, чтобы автоматизировать некоторые повседневные задачи.
Я пытаюсь выяснить все имена полей из функции get-winevent, чтобы понять, что мне нужно делать, когда я хочу отфильтровать результат из большого количества событий с несколькими условиями.
В этом простом примере мне нужны все события 4625 и события 4624, но только если logontype равен 2. В таблице результатов должны быть только заданные поля (на данный момент все поля, позже выбранные поля и одно настраиваемое поле). Кроме того, я хотел бы пометить локальные логины и удаленные логины в определенном столбце с помощью "локальных" или "удаленных" и сетевых данных (IP, имя пользователя, имя хоста).
Get-winevent -FilterHashtable @{Path="c:\temp\test.evtx";} |
Where-Object {$_.Id -eq 4624 -and $_.properties[8].value -in 2}
-or
{$_.Id -eq 4625}| export-csv ($EventlogTempFolder+$_.basename + ".csv") -encoding UTF8 -NoTypeInformation -force
Как я могу получить список всех полей? От ID до всех полей свойств в поле сообщения?
Кстати: этот код не работает, как ожидалось. простите за это.
1 ответ
Ваш код
Where-Object {$_.Id -eq 4624 -and $_.properties[8].value -in 2}
-or
{$_.Id -eq 4625}
От Get-Help Where-Object
Where-Object [-FilterScript] <ScriptBlock> [-InputObject <PSObject>] [<CommonParameters>]
...
Starting in Windows PowerShell 3.0, there are two different ways to construct a Where-Object
command. Script block . You can use a script block to specify the property name, a comparison
operator, and a property value. Where-Object returns all objects for which the script block
statement is true.
For example, the following command gets processes in the Normal priority class, that is,
processes where the value of the PriorityClass property equals Normal.
`Get-Process | Where-Object {$_.PriorityClass -eq "Normal"}`
проблема
Where-Object
CmdLet принимает только один блок скрипта (бит в {}
брекеты)
исправлять
Where-Object {
($_.Id -eq 4624 -and $_.properties[8].value -in 2)
-or
$_.Id -eq 4625
}