【问题标题】:Export Windows Logs with Precise Time以精确的时间导出 Windows 日志
【发布时间】:2019-05-08 10:03:39
【问题描述】:

我正在尝试使用 Get-WinEvent Powershell cmdlet 导出 Windows 日志。以下将为我提供我正在寻找的时间精度,但这只会让我获得时间戳。我需要将时间戳加入到包含机器名称、事件 ID 等的其他列中。

此代码为我提供准确的时间戳。

  Get-WinEvent -LogName Application -MaxEvents 10 | Select-Object -Expand TimeCreated | ForEach-Object { 
$date = [DateTime]$_
$date.ToString("yyyy-MM-dd HH:mm:ss")}

输出看起来像我想要的这样:

2018-12-06 08:52:28 
2018-12-06 08:52:28 
2018-12-06 08:51:32 
2018-12-06 08:51:31 
2018-12-06 08:51:31 
2018-12-06 08:51:31 
2018-12-06 08:51:31
2018-12-06 08:51:31 
2018-12-06 08:51:31 
2018-12-06 08:44:16

但我需要输出包含精确时间以及 MachineName、EventID、LevelDisplayName、Message 等内容。所以在下面的命令中,我想插入精确时间,而不是“TimeCreated”。

Get-WinEvent -LogName Application -MaxEvents 10 | Select-Object TimeCreated,Machinename,Id,LevelDisplayName,Message,Logname | ft

谢谢!

【问题讨论】:

  • 不必要的命令| Select-Object -Expand TimeCreated 排除了所有其他属性,只需将其删除即可。要获得 TimeCreated 的确切格式,请使用计算属性(它就在那里,但可能会由于输出时未知的语言环境设置而被剥离)

标签: powershell timestamp get-eventlog get-winevent


【解决方案1】:

要获得 TimeCreated 的确切格式,请使用计算属性

Get-WinEvent -LogName Application -MaxEvents 10 |
   Select-Object @{n='TimeCreated';e={$_.TimeCreated.ToString("yyyy-MM-dd HH:mm:ss")}},
                 Machinename,Id,LevelDisplayName,Logname,Message|Format-Table -auto

为了更精确,您还可以包含几分之一秒
(将,f .. ,fffffff 附加到格式字符串)

编辑:我没有你的环境,但 write-Host 应该不是必需的。

这应该将格式化的 CreatedTime 输出到 csv

Get-WinEvent -LogName "Microsoft-Windows-TerminalServices-SessionBroker/Operational" `
             -ComputerName $SessionBroker -MaxEvents 150 | 
  Select-Object @{n='TimeCreated';e={$_.TimeCreated.ToString("yyyy-MM-dd HH:mm:ss")}}, 
                Machinename,Id,LevelDisplayName,Message,LogName,TaskDisplayName | 
    Export-Csv $RDSLogs\SessionBrokerOperational.csv -Append -NoTypeInformation

【讨论】:

  • 谢谢,这太完美了!这正是我需要它做的。我很感激!
  • 对不起一个后续问题。我有以下行,当我“写主机”时效果很好。但是当我 Export-Csv 时,“TimeCreated”列没有显示准​​确的时间。它显示了原始时间。 Get-WinEvent -LogName "Microsoft-Windows-TerminalServices-SessionBroker/Operational" -ComputerName $SessionBroker -MaxEvents 150 |选择对象@{n='TimeCreated';e={$_.TimeCreated.ToString("yyyy-MM-dd HH:mm:ss")}}, Machinename,Id,LevelDisplayName,Message,LogName,TaskDisplayName | Export-Csv $RDSLogs\SessionBrokerOperational.csv -Append -NoTypeInformation
  • 嗯,这更像是一个破碎的后续评论。如您所见,cmets 只是为 cmets 制作的,没有换行符的代码几乎不可读。编辑此问题以包含更多信息会更好 - 但会偷走我(和其他人)通过另一个好的答案获得声誉的机会。
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 2016-07-26
  • 2018-07-02
  • 1970-01-01
相关资源
最近更新 更多