我有一个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
答案 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*"}