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 #input #prompt