【发布时间】:2016-01-15 15:10:29
【问题描述】:
我正在尝试使用 wevtutil.exe 从 Windows EventLog 导入事件,使用 powershell 处理数据并将其导入 MS SQL 数据库。 例如:
$bulkcopy = new-object Data.SqlClient.SqlBulkCopy -argumentlist $connectionstring,$(<something>)
$dt = new-object "System.Data.DataTable"
$null = $dt.Columns.Add("EventID")
$null = $dt.Columns.Add("whenEvent")
[xml]$xml = (wevtutil /r:$nodename qe Security /e:Events /f:renderedxml /q:"*[System[(EventID=4722) or (EventID=4740)]]")
$xml.Events.Event | ForEach-Object {
$row =$dt.NewRow()
$row.Item("EventID")= $_.System.EventID
$row.Item("whenEvent")= [datetime]$_.System.TimeCreated.SystemTime
$rt.Rows.Add($row)
$bulkcopy.WriteToServer($dt)
}
当 Event 包含 TimeCreated.SystemTime (real value) '2016-01-13T10:01:09.641338100Z' 时,它工作正常。但是当在(实际值)'2016-01-13T10:58:08.550129100Z'中创建事件时,它会出错:
"从字符转换日期和/或时间时转换失败 字符串。”
我尝试使用
$row.Item("whenEvent")=(Get-Date [datetime]$_.System.TimeCreated.SystemTime -f "yyyyMMdd HH:mm:ss.fff")
但它总是例外:
来自数据源的String类型的给定值不能转换为指定目标列的日期时间类型。
当我尝试时
$row.Item("whenEvent")=$_.System.TimeCreated.SystemTime.ToDateTime()
它说
列“whenEvent”不允许 DBNull.Value。 因为它不能为空。
如何正确转换事件日志中的日期时间? MSSQL 数据库字段的类型为“日期时间”。
【问题讨论】:
标签: sql-server powershell datetime event-log