首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell,Get-WinEvent ID和数组的奇怪行为

PowerShell,Get-WinEvent ID和数组的奇怪行为
EN

Stack Overflow用户
提问于 2018-09-28 14:03:02
回答 1查看 574关注 0票数 3

我想做什么?

我运行Get-WinEvent函数,-FilterHashTableID参数提供了一个有趣的事件ID数组。

代码语言:javascript
复制
$IDS = 4720,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4737,4738,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4767,4781

Get-WinEvent -ComputerName DC -FilterHashTable @{ LogName='Security'; ID=$IDS; }

返回的错误:

代码语言:javascript
复制
# Get-WinEvent : No events were found that match the specified selection criteria.

(我知道匹配的事件确实存在)

我注意到,对于较小的数组,函数返回正结果,因此很少尝试,我断言如下:

  • 直接调用数组计数-le 23工作正常;
  • 直接调用数组计数-gt 23会导致错误。

看似合适的解决方案..。

我假设23是Get-WinEvent的底层机制可以处理的参数的无文档限制,然后决定将调用拆分为几个带有较小数组的调用:

代码语言:javascript
复制
$MaxCount = 23
For ( $i = 0; $i -lt $IDS.count; $i += $MaxCount ) { 
    $IDSChunks += ,@( $IDS[ $i..($i+$MaxCount-1) ] ) 
}

通过这种方式,我们将数组分成两个部分,每个数组都计算-le 23元素:

代码语言:javascript
复制
$IDSChunks | %{ $_ -join "," }
4720,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4737,4738,4740,4741,4742,4743,4744,4745
4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4767,4781

手动检查,此操作如预期的那样工作:

代码语言:javascript
复制
Get-WinEvent -ComputerName DC -FilterHashTable @{ LogName='Security'; ID=$IDSChunks[0]; }
Get-WinEvent -ComputerName DC -FilterHashTable @{ LogName='Security'; ID=$IDSChunks[1]; }

但是..。

然而,这并不是:

代码语言:javascript
复制
$IDSChunks | %{ Get-WinEvent -ComputerName DC -FilterHashTable @{ LogName='Security'; ID=$_; } }

和已经熟悉的错误的结果:

代码语言:javascript
复制
# Get-WinEvent : No events were found that match the specified selection criteria.
# Get-WinEvent : No events were found that match the specified selection criteria.

为什么?

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-28 14:55:31

我仍然试图研究为什么,但如果您强制管道变量到数组中,我可以让它工作。它已经是一个对象数组,但也许它正在展开。这与显式调用元素时没有什么不同。我同意这很奇怪

代码语言:javascript
复制
$IDSChunks | %{ Get-WinEvent -ComputerName dckan08ba -FilterHashTable @{ LogName='Security'; ID=@($_)} }

添加正在转换为空格分隔字符串的详细开关支持。它应该是这样的:

代码语言:javascript
复制
VERBOSE: Constructed structured query:
*[((System/EventID=4746) or (System/EventID=4747) or
(System/EventID=4748) or (System/EventID=4749) or (System/EventID=4750) or (System/EventID=4751) or
(System/EventID=4752) or (System/EventID=4753) or (System/EventID=4754) or (System/EventID=4755) or
(System/EventID=4756) or (System/EventID=4757) or (System/EventID=4758) or (System/EventID=4759) or
(System/EventID=4760) or (System/EventID=4761) or (System/EventID=4762) or (System/EventID=4763) or
(System/EventID=4764) or (System/EventID=4767) or (System/EventID=4781))].

但相反,这是:

代码语言:javascript
复制
VERBOSE: Constructed structured query:
*[(System/EventID=4746 4747 4748 4749 4750 4751 4752
4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4767 4781)].
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52557050

复制
相关文章

相似问题

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