Powershell:如何从eventlog的消息字段中提取时间

我试图通过 Powershell 中的Get-EventLog获取 Windows Sever 2008 机器的意外关机时间。我可以通过搜索 6008 的EventID事件并选择message来接近,但我需要在字段中解析以获取它发生的时间(而不是事件触发的时间)。

我试图通过 Powershell 中的Get-EventLog获取 Windows Sever 2008 机器的意外关机时间。我可以通过搜索 6008 的EventID事件并选择message来接近,但我需要在字段中解析以获取它发生的时间(而不是事件触发的时间)。

我试图使用replacementstrings[x],但我找不到如何指定要使用的字段(messages),无法获得结果。

get-eventlog-LogName System-ComputerName svr-name | Where-Object {$_.EventID-eq 6008-AND $_.timegenerated-gt (get-date).adddays(-30)}| select message

产生这个:

Message
-------
The previous system shutdown at 3:35:32 AM on ‎7/‎29/‎2014 was unexpected.
The previous system shutdown at 3:40:06 PM on ‎7/‎10/‎2014 was unexpected.`
3

从远程主机检索所有事件并在本地计算机上对其进行过滤通常效果不佳,因为这样您就可以通过网络传输大量不相关的事件,只是为了将其丢弃。Get-EventLog具有按事件 ID 或源上给定时间戳之前 / 之后过滤消息的选项,因此最好使用这些选项来预先选择您实际感兴趣的消息。

$log     = 'System'
$server  = 'svr-name'
$id      = [uint64]"0x80000000" + 6008
$date    = (Get-Date).AddDays(-30)
$fmt     = 'h:mm:ss tt on M\/d\/yyyy'
$culture = [Globalization.CultureInfo]::InvariantCulture
Get-EventLog -LogName $log -ComputerName $server -InstanceId $id -After $date | ? {
  $_.Message -match 'at (\d+:\d+:\d+ [ap]m on \d+/\d+/\d+) was unexpected'
} | select MachineName, TimeGenerated,
           @{n='Crashtime';e={[DateTime]::ParseExact($matches[1], $fmt, $culture)}}

管道生成一个对象列表,其属性为MachineNameTimeGeneratedCrashtime(最后一个是calculated property)。如果您在变量(例如$evt)中收集管道的输出,则可以访问第三个对象的Crashtime属性,如下所示:

$evt = .\script.ps1
$evt[2].Crashtime
2

使用正则表达式,你可以把它拉出来。

$Messages = (get-eventlog -LogName System -ComputerName svr-name | Where-Object {$_.EventID -eq 6008 -AND $_.timegenerated -gt (get-date).adddays(-30) }| select message)
$Messages | ForEach-Object { 
    $Matched = $_.Message -match "([0-9]{1,2}:.*[0-9]{4})"
    if ($Matched) {
        Write-Output "System rebooted at $($Matches[1])" 
    }
}

可能有更好的方法,但我不知道是什么:)

我的系统输出示例

System rebooted at 4:34:30 PM on ‎4/‎20/‎2014
System rebooted at 1:48:38 PM on ‎1/‎21/‎2014
System rebooted at 1:37:12 PM on ‎1/‎21/‎2014
System rebooted at 1:22:01 PM on ‎1/‎21/‎2014
System rebooted at 4:41:21 PM on ‎11/‎22/‎2013
1

更容易

get-eventlog system  | where-object {$_.EventID -eq  "6008"} | fl

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(150)
PHP的最佳IDE是什么
上一篇
将 yyyy-MM-dd'T'HH:mm:ss.mmm'Z'转换为普通的"HH:mma" 格式
下一篇

相关推荐

  • Powershell:如何从eventlog的消息字段中提取时间

    我试图通过 Powershell 中的Get-EventLog获取 Windows Sever 2008 机器的意外关机时间。我可以通过搜索 6008 的EventID事件并选择message来接近,但我需要在字段中解析以获取它发生的时间(而不是事件触发的时间)。…

    2022-12-13 10:17:53
    0 36 67
  • powershell脚本实例:如何使用PowerShell脚本管理Windows服务

    脚本是一种可以用来自动化复杂的任务的强大工具。它的基本语法与其他编程语言类似,但更加简单易懂。下面是一个简单的脚本实例,它可以获取当前系统上所有运行中的进程:…

    2023-01-13 15:29:36
    0 60 52
  • Skype连接不上:使用Powershell上的Skype联机连接器获取用户的 Skype状态

    关于Skype连接不上的问题,在login skype online中经常遇到,我正在开发一个小脚本,输出用户当前的 Skype for Business 状态。…

    2022-12-15 12:01:06
    0 86 11
  • 手机cpu处理器最新排名:通过PowerShell获取CPU处理器速度

    关于手机cpu处理器最新排名的问题,在processor speed中经常遇到,我需要获取 CPU 处理器速度的数量作为数字。我不能使用任何额外的实用程序命令。我只能在 Windows 或 Powershell 中使用 cmd。…

    2022-12-17 00:19:05
    0 42 22
  • 祝生日快乐的代码:生日蛋糕的 Powershell代码

    关于祝生日快乐的代码的问题,在how to write happy birthday on a cake中经常遇到,我的儿子是计算机科学专业的,他的生日快到了。我想为他创建一个代码主题蛋糕。我已经研究了 PowerShell 代码,并创建了我认为是正确和有趣的东西。但是,我不确定,并被打开这个网站以获得帮助。这就是我所拥有的...JularJ 是我儿子的视频游戏的显示名称。…

    2022-12-29 13:14:57
    0 27 95
  • 服务器监控脚本:服务器监控 powershell脚本

    关于服务器监控脚本的问题,在powershell server monitoring dashboard中经常遇到,我已经编写了用于服务器监控的 PowerShell 脚本。我已经在 Google Cloud Platform 上创建了服务器。我的服务器 / 实例外部 IP 为 34.72.154.186 (http://34.72.154.186/)。这是我的 PowerShell 脚本:…

    2022-11-30 12:38:25
    0 64 16
  • PowerShell中用于截断字符串长度的子字符串

    是否可以在 PowerShell 中截断字符串(使用SubString()?),到给定的最大字符数,甚至如果原始字符串已经更短?…

    2022-11-11 15:20:56
    0 55 34
  • Powershell:查找已安装的防病毒软件和状态 筛选出 WindowsDefender

    我在这里的另一篇文章中遇到了这个脚本的基础,但是,我想进一步尝试一下。我想要实现的是获取设备上安装的防病毒软件的名称,状态,当然我想过滤掉 Windows Defender。…

    2022-12-01 14:26:52
    0 32 95

发表评论

登录 后才能评论

评论列表(23条)