Powershell:为Get-WinEvent过滤掉.tmp文件

时间:2017-09-21 14:13:37

标签: powershell

我有一个PowerShell脚本,用于过滤事件查看器中的某些安全事件。具体而言,事件ID 4663,用于审核谁删除服务器共享上的文件。不幸的是,这也显示了被删除的.tmp文件,我并不关心。

该脚本可以正常过滤这些事件,但我无法弄清楚如何过滤掉.tmp事件。我尝试了-ne-match-notlike-notcontains!运算符等内容,但仍会显示.tmp事件。

这是我的代码:

$path= "C:\Path\To\Folder\Security.evtx"
$filter= "*[System[(EventID=4663)]]"
$main= Get-WinEvent -path $path -FilterXPath $filter -MaxEvents 10 | Format-List
$main | Where-Object {$_.extension -notlike "*.tmp"}

任何有关过滤掉这些.tmp删除事件的帮助都将非常感谢!

***更新了解决方案

原来我在“* .tmp”的末尾错过了*,并且需要包含.message属性。解决方案:

$main= Get-WinEvent -path $path -FilterXPath $filter -MaxEvents 10
$main | Where-Object {$_.Message -notlike "*.tmp*"} | Format-List

1 个答案:

答案 0 :(得分:1)

一个问题是您将结果汇总到此行中的Format-List

$main= Get-WinEvent -path $path -FilterXPath $filter -MaxEvents 10 | Format-List

通过执行此操作,对象类型已更改,无法再对其属性进行过滤。在| Format-List

之后删除Where-Object和/或使用此cmdlet

关于过滤,我认为您可能需要在Message属性的输出中查找* .tmp,如下所示:

$main | Where-Object {$_.message -notlike "*.tmp*"}