首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Powershell、-filterhashtable和运算符

Powershell、-filterhashtable和运算符
EN

Stack Overflow用户
提问于 2013-11-07 16:57:26
回答 2查看 6.2K关注 0票数 2

我正在使用“”cmdlet过滤事件日志条目。我希望得到级别小于4(或者LevelName不是“信息”)的事件。

我使用-filterhashtable标志来过滤事件。但是,有没有办法与过滤器哈希表进行比较呢?还是直接写个“不”?还是filterhashtable只接受"=“作为操作符?

这两个片段起作用并得到相同的结果:

何地对象

代码语言:javascript
运行
复制
$events = Get-WinEvent -computer ServerName -LogName System | Where-Object {$_.level -lt 4}

-filterhashtable

代码语言:javascript
运行
复制
$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事件对象之前进行过滤,这要快得多。

我能把这些陈述结合起来吗?这些片段不起作用:

代码语言:javascript
运行
复制
$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唯一接受的运算符吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-07 17:20:07

不能对这样的操作人员下注。FilterXPath参数支持这一点。但是,FilterHashtable参数上的帮助指示它需要一个int数组,因此它将接受:

代码语言:javascript
运行
复制
... -FilterHashtable @{LogName='System';Level=0,1,3}
票数 11
EN

Stack Overflow用户

发布于 2013-11-07 17:09:55

不,你不能。哈希表是key = value对的集合,因此它不允许关系运算符。

顺便说一下,在Powershell < is -lt> is -gt中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19841953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档