powershell Win-GetEvent -MaxEvents

Posted

技术标签:

【中文标题】powershell Win-GetEvent -MaxEvents【英文标题】: 【发布时间】:2020-02-02 16:40:06 【问题描述】:

尝试将 PS 查询组装到 EventLog 中,并使用 MaxEvents 限制。如果“MaxEvents”为 1,它打印零行,当 MaxEvents 为 2 时,它打印标题行和一个事件。这是正确的行为,还是我错过了什么?

powershell.exe Get-WinEvent -FilterHashTable "@ LogName = 'Microsoft-Windows-UniversalTelemetryClient/Operational'; Id = 55 -MaxEvents 2 | where $_.Message -match 'false' | ft -HideTableHeader"

ProviderName: Microsoft-Windows-UniversalTelemetryClient

02/02/2020 14:25:04             55 Information      Is the Internet ava...

【问题讨论】:

看起来您的过滤器在 G-WE 调用后正在删除与 false 不匹配的项目。你看过 G-WE 调用本身的结果吗……没有过滤器? 【参考方案1】:

查看下面的结果:

Get-WinEvent -FilterHashTable @ LogName = 'Microsoft-Windows-UniversalTelemetryClient/Operational'; Id = 55 

我的电脑是:

TimeCreated Id LevelDisplayName 消息 ----------- -- ---------------- -------- 21/01/2020 06:29:23 55 信息 互联网是否可用:真的 21/01/2020 05:32:29 55 信息 互联网是否可用:真的 20/01/2020 17:23:22 55 信息 互联网是否可用:是的 2020 年 19 月 1 日 07:12:06 55 信息 互联网是否可用:真的 2020 年 19 月 1 日 07:07:22 55 信息互联网是​​否可用:假

如果我为不超过 4 的任何值添加 -MaxEvents 则没有结果

如果我添加 -MaxEvents 5:

提供者名称:Microsoft-Windows-UniversalTelemetryClient

2020 年 19 月 1 日 07:07:22 55 信息互联网是​​否可用:假

因此,-MaxEvents 是根据 -FilterHashTable 的结果处理的,而不是根据日志的结果处理的。

【讨论】:

在哈希表部分对我有帮助之前添加-MaxEvents。这里的工作版本:powershell.exe Get-WinEvent -MaxEvents 2 -FilterHashTable "@ LogName = 'Microsoft-Windows-UniversalTelemetryClient/Operational'; Id = 55 | where $_.Message -match 'false' | ft -HideTableHeader" 想知道为什么你的输出没有被截断而我的却是?我只得到了字符串Is the Internet ava... 的一部分,但您的输出Is the Internet available: true 中有一个完整的字符串。我无法解析单词“true”或“false”的输出 可能是因为你运行它的方式,它返回一个字符串而不是一个对象 - 你为什么使用'powershell.exe'?尝试在输出之前将 Select TimeCreated,Message 插入到您的命令中。 此命令是批处理脚本的一部分,因为无法通过 WMI 访问 eventlog 'Microsoft-Windows-UniversalTelemetryClient'(在我的情况下使用 getwmiproperty.exe 工具),因此我必须通过 PS 阅读它并在 FOR 循环中解析输出。由于我对 PS 一无所知,只是盲目地尝试组装合适的命令:-/ 我不知道如何将“Select TimeCreated,Message”合并到我的命令中。只是尝试了几个变种,但没有运气...... 知道了,非常感谢! powershell.exe "Get-WinEvent -MaxEvents 1 -FilterHashTable @ LogName = 'Microsoft-Windows-UniversalTelemetryClient/Operational'; ID = 55 | Select-Object -Property TimeCreated,Message" 但无论如何,有没有任何选项可以在 PS 输出中禁用字符串截断?

以上是关于powershell Win-GetEvent -MaxEvents的主要内容,如果未能解决你的问题,请参考以下文章

powershell怎么运行

powershell PowerShell:启动PowerShell作为其他用户提升

powershell [提示输入powershell] #powershell #input #prompt

powershell 测量PowerShell命令或PowerShell脚本的速度

powershell远程下载exe并执行

powershell 使用啥端口