Bag*_*era 1 powershell powershell-2.0
我正在使用"Get-Winevent"cmdlet过滤事件日志条目.我想获得级别小于4的事件(或者LevelName不是"信息"的事件).
我使用-filterhashtable标志来过滤事件.但有没有办法与filterhashtable进行比较?或者只是把"不"?或者filterhashtable只接受"="作为运算符?
这两个片段起作用并得到相同的结果:
其中,对象
$events = Get-WinEvent -computer ServerName -LogName System | Where-Object {$_.level -lt 4}
Run Code Online (Sandbox Code Playgroud)
-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}
Run Code Online (Sandbox Code Playgroud)
第二个片段比第一个片段运行得快得多(2分钟对比16秒).据我了解,"where-object"必须等到"Get-WinEvent"获得每个事件对象(可能是数千个).添加"-filterhashtable"会导致目标系统的事件日志在提供事件对象Get-WinEvent之前进行过滤,这样会快得多.
我可以结合这些陈述吗?这些片段不起作用:
$events = Get-WinEvent -computer ServerName -FilterHashTable @{LogName = 'System'; Level < 4}
$events = Get-WinEvent -computer ServerName -FilterHashTable @{LogName = 'System'; Level != 2}
Run Code Online (Sandbox Code Playgroud)
"Level"属性的类型为"int [32]",因此比较运算符应该起作用.实际上,它确实适用于"where-object".但它不适用于"-filterhashtable"标志.有没有办法进行那种比较?"="是唯一的运算符-filterhashtable接受吗?
像这样的运营商没有骰子.FilterXPath参数支持该参数.但是,FilterHashtable参数的帮助表明它需要一个int数组,所以它会接受:
... -FilterHashtable @{LogName='System';Level=0,1,3}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4711 次 |
| 最近记录: |