精确导出Windows日志

时间:2018-12-06 16:41:28

标签: powershell timestamp get-eventlog get-winevent

我正在尝试使用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

谢谢!

1 个答案:

答案 0 :(得分: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附加到格式字符串)

编辑:我没有您的环境,但是不需要写主机。

这应该将格式化的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