我正在使用Get-EventLog提取Windows事件日志,并删除不希望使用source和eventid作为标准的日志事件。当我使用where进行解析时,请注意这些值。例如,如果我这样做
$Events = Get-EventLog -ComputerName $computer -LogName Application
$events | ft source, eventid
我看到以下内容:
Source EventID ------ ------- AutoEnrollment 34
如果我这样做:
$events |
?{($_.Source -ne "AutoEnrollment" -and $_.EventID -ne 14)} |
ft source, eventid
结果为空,这使我感到困惑,因为事件ID显然不匹配。我希望如果我针对$_.eventid -ne 34
进行评估,那么结果将不会显示该事件。早在2012年我在PowerShell 2上编写代码时,此方法就起作用了。现在在v5.1上,它无法正确评估。
我应该知道有什么变化吗?还是一开始我搞砸了?如果我做错了,那么关于如何说“哪里事件不符合指定条件作为一组条件”的任何建议都将显示,以便source = autoenrollment和eventid = 34出现,但是不会出现具有source = autoenrollment和eventid = 14的事件。
答案 0 :(得分:0)
mjsqu的这两篇文章回答了这个问题:
es和@ MathiasR.Jessen的建议是正确的。 NOT(A和B)与NOT(A)和NOT(B)不同,等效于NOT(A)或NOT(B)。为什么这曾经在PS2上起作用,这很奇怪。 – mjsqu 21小时前
我会改写为
... |? {-not ($_.Source -eq "AutoEnrollment" -and $_.EventID -eq 14)}
...可以说更易读。