【问题标题】:Conversion failed when import events from eventlog to sql using powershell使用powershell将事件从事件日志导入sql时转换失败
【发布时间】: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


    【解决方案1】:

    当您使用Get-Date-format 参数时,您实际上将输出指定为字符串,而不是 DateTime 对象:

    PS:\> Get-Date -Format "yyyyMMdd HH:mm:ss.fff" | Get-Member
    
    
       TypeName: System.String
    
    Name             MemberType            Definition
    ----             ----------            ----------
    Clone            Method                System.Object Clone(), System.Object ICloneable.Clone()
    ...
    

    因此,使用[datetime]$_.System.TimeCreated.SystemTime,您将输入日期字符串转换为日期时间,然后使用 Get-Date 的 -f 参数再次更改回字符串。

    尝试删除格式参数。

    【讨论】:

    • 为什么要使用 wevtutil?如果您使用本机 PowerShell Get-Eventlog,则 TimeGenerated 属性已经是 DateTime。
    • 非常感谢您的建议!我尝试了几次预格式化与否,这没有任何意义。问题是......在我添加数据的表上的触发器中。在我的情况下,Wevtutil 快一点。
    【解决方案2】:

    我是个白痴。问题出在表中插入后的触发器中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多