我正在使用“”cmdlet过滤事件日志条目。我希望得到级别小于4(或者LevelName不是“信息”)的事件。
我使用-filterhashtable标志来过滤事件。但是,有没有办法与过滤器哈希表进行比较呢?还是直接写个“不”?还是filterhashtable只接受"=“作为操作符?
这两个片段起作用并得到相同的结果:
何地对象
$events = Get-WinEvent -computer ServerName -LogName System | Where-Object {$_.level -lt 4}-filterhashtable
$events = Get-WinEvent -computer ServerName -FilterHashTable @{LogName = 'System'; Level = 1}
$events += Get-WinEvent -computer ServerName -FilterHashTable @{LogName = 'System'; Level = 2}
$events += Get-WinEvent -computer ServerName -FilterHashTable @{LogName = 'System'; Level = 3}第二个片段的运行速度要比第一个片段快得多(在一种情况下为2分,16秒)。据我所知,"where- object“必须等到”gotten“得到每个事件对象(可能有数千个)为止。添加"-filterhashtable“会使目标系统的事件日志在给出gives事件对象之前进行过滤,这要快得多。
我能把这些陈述结合起来吗?这些片段不起作用:
$events = Get-WinEvent -computer ServerName -FilterHashTable @{LogName = 'System'; Level < 4}
$events = Get-WinEvent -computer ServerName -FilterHashTable @{LogName = 'System'; Level != 2}"Level“属性是"int32”类型,因此比较操作符应该可以工作。事实上,它确实适用于"where-object“。但它不适用于"-filterhashtable“标志。没有办法做那种比较吗?"=“是-filterhashtable唯一接受的运算符吗?
发布于 2013-11-07 17:20:07
不能对这样的操作人员下注。FilterXPath参数支持这一点。但是,FilterHashtable参数上的帮助指示它需要一个int数组,因此它将接受:
... -FilterHashtable @{LogName='System';Level=0,1,3}发布于 2013-11-07 17:09:55
不,你不能。哈希表是key = value对的集合,因此它不允许关系运算符。
顺便说一下,在Powershell < is -lt和> is -gt中。
https://stackoverflow.com/questions/19841953
复制相似问题