我尝试学习powershell来自动完成一些日常任务。
我试图弄清楚get-winevent函数中的所有字段名,以便了解当我想要从许多条件中过滤结果时我需要做什么。
在这个简单的例子中,我想要所有事件4625和来自4624的事件,但仅当logontype为2.结果表应该只包括给定的字段(现在所有字段,稍后在选定字段和一个自定义字段)。 另外,我想在" local"特定列中标记本地登录和remotelogins。或"远程"和网络数据(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到消息字段中的所有属性字段?
顺便说一下:这段代码没有按预期工作。对不起
答案 0 :(得分: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
}