我有一个PowerShell脚本,它将来自Eventviewer的数据写入MS SQL数据库。
$events = Get-WinEvent @{LogName = "System"; ID = 4720,4726,4741,4743,4727,4730,4728,4729,4740,4767} | Select-Object ID, MachineName, Message, TimeCreated
$connectionString = "Data Source=Server\INSTANZ;Integrated Security=true;Initial Catalog=Database;"
$bulkCopy = new-object ("Data.SqlClient.SqlBulkCopy") $connectionString
$bulkCopy.DestinationTableName = "Table"
$dt = New-Object "System.Data.DataTable"
# build the datatable
$cols = $events | select -first 1 | get-member -MemberType NoteProperty | select -Expand Name
foreach ($col in $cols) {$null = $dt.Columns.Add($col)}
foreach ($event in $events)
{
$row = $dt.NewRow()
foreach ($col in $cols) { $row.Item($col) = $event.$col }
$dt.Rows.Add($row)
}
# Write to the database!
$bulkCopy.WriteToServer($dt)
MS SQL数据库具有行ID,MachineName,Message和TimeCreated。
当我第一次运行脚本时,它完美运行。当我再次运行脚本时,它会再次将所有数据写入数据库。
我怎样才能在两次运行之间写出不同的颜色?
答案 0 :(得分:0)
您可以在桌面上创建INSTEAD OF触发器:
CREATE TRIGGER SomeTriggerName
ON YourTableName
INSTEAD OF INSERT
AS
MERGE YourTable as t
USING inserted as i
ON i.ID= t.ID
WHEN NOT MATCHED THEN
INSERT VALUES (ID, MachineName, Message, TimeCreated)
WHEN MATCHED THEN
UPDATE SET MachineName = i.MachineName,
Message = i.Message,
TimeCreated = i.TimeCreated
或者您可以直接使用MERGE,而不是INSERTion:
MERGE YourTable as t
USING inserted as i
ON i.ID= t.ID
WHEN NOT MATCHED THEN
INSERT VALUES (ID, MachineName, Message, TimeCreated)
WHEN MATCHED THEN
UPDATE SET MachineName = i.MachineName,
Message = i.Message,
TimeCreated = i.TimeCreated
答案 1 :(得分:0)
尝试使用sql执行此操作
您需要确定sql表中的哪些列使您的记录唯一
然后在使用您的唯一密钥检查已经存在的记录时执行sql插入