关于排序和管道的 PowerShell 问题
PowerShell question with sorting and piping
您好,我使用的是 PowerShell 版本 5
我是 运行 一个命令,它正在运行,但缩小的搜索没有返回结果。
Get-EventLog System -Newest 5 | where {$_.eventID -eq 1074}
所以我想哦,我只想查看与我的过滤器匹配的最后 5 个对象。它运行但 returns 没有结果,因为在事件日志中,最后 5 个条目中没有 eventID 1074。所以我只需要将该参数移到最后。运气不好
Get-EventLog System | where {$_.eventID -eq 1074} | -newest 5
-newest : The term '-newest' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:53
+ Get-EventLog System | where {$_.eventID -eq 1074} | -newest 5
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (-newest:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
因此,将 -newest
定位在管道后将参数移动到我认为不理解的位置。
任何人对我如何思考这个问题有一些建议,这对我将来有帮助吗?
要将您的 筛选的 结果限制为最多 5 个事件,您必须在最终管道段中使用 Select-Object -First 5
:
Get-EventLog System | Where-Object { $_.eventID -eq 1074 } | Select-Object -First 5
-Newest <n>
是Get-EventLog
特有的参数,它无条件returns第一个<n>
条目,无论其内容如何。
没有 common parameter across cmdlets that offers similar functionality, but there's the generic Select-Object
cmdlet 允许通过 -First <n>
从任何输入中选择最多 <n>
个对象。
这里有一种可能更快捷的方式来获取您似乎想要的信息。它使用 Get-WinEvent
而不是 Get-EventLog
并且还使用 -FilterHashtable
参数让事件系统进行一些过滤。
#requires -RunAsAdministrator
$FilterHash = @{
Logname = 'System'
ID = 1074
StartTime = (Get-Date).AddDays(-20)
}
Get-WinEvent -FilterHashtable $FilterHash -MaxEvents 20
这 通常 明显比使用 Get-EventLog
快。 [咧嘴一笑]
这里有一篇关于想法的文章...
使用 FilterHashTable 通过 PowerShell 过滤事件日志 – 你好,脚本专家!博客
— https://blogs.technet.microsoft.com/heyscriptingguy/2014/06/03/use-filterhashtable-to-filter-event-log-with-powershell/
您好,我使用的是 PowerShell 版本 5 我是 运行 一个命令,它正在运行,但缩小的搜索没有返回结果。
Get-EventLog System -Newest 5 | where {$_.eventID -eq 1074}
所以我想哦,我只想查看与我的过滤器匹配的最后 5 个对象。它运行但 returns 没有结果,因为在事件日志中,最后 5 个条目中没有 eventID 1074。所以我只需要将该参数移到最后。运气不好
Get-EventLog System | where {$_.eventID -eq 1074} | -newest 5
-newest : The term '-newest' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:53
+ Get-EventLog System | where {$_.eventID -eq 1074} | -newest 5
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (-newest:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
因此,将 -newest
定位在管道后将参数移动到我认为不理解的位置。
任何人对我如何思考这个问题有一些建议,这对我将来有帮助吗?
要将您的 筛选的 结果限制为最多 5 个事件,您必须在最终管道段中使用 Select-Object -First 5
:
Get-EventLog System | Where-Object { $_.eventID -eq 1074 } | Select-Object -First 5
-Newest <n>
是Get-EventLog
特有的参数,它无条件returns第一个<n>
条目,无论其内容如何。
没有 common parameter across cmdlets that offers similar functionality, but there's the generic Select-Object
cmdlet 允许通过 -First <n>
从任何输入中选择最多 <n>
个对象。
这里有一种可能更快捷的方式来获取您似乎想要的信息。它使用 Get-WinEvent
而不是 Get-EventLog
并且还使用 -FilterHashtable
参数让事件系统进行一些过滤。
#requires -RunAsAdministrator
$FilterHash = @{
Logname = 'System'
ID = 1074
StartTime = (Get-Date).AddDays(-20)
}
Get-WinEvent -FilterHashtable $FilterHash -MaxEvents 20
这 通常 明显比使用 Get-EventLog
快。 [咧嘴一笑]
这里有一篇关于想法的文章...
使用 FilterHashTable 通过 PowerShell 过滤事件日志 – 你好,脚本专家!博客
— https://blogs.technet.microsoft.com/heyscriptingguy/2014/06/03/use-filterhashtable-to-filter-event-log-with-powershell/