最近在尝试将Windows事件日志发送到Sql Server或者Mysql,网上翻了一圈发现还是PowerShell方便直连Sql Server。
先创建数据库脚本
CREATE TABLE [dbo].[SecurityLog] (
[ID] bigint IDENTITY(1,1) NOT NULL,
[LogIndex] bigint NULL,
[LogTime] nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL,
[LogEntryType] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL,
[LogInstanceId] int NULL,
[LogSource] nvarchar(1000) COLLATE Chinese_PRC_CI_AS NULL,
[LogMessage] nvarchar(4000) COLLATE Chinese_PRC_CI_AS NULL,
[Hostname] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL,
[HostIP] nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL,
[addtime] nvarchar(50) COLLATE Chinese_PRC_CI_AS DEFAULT CONVERT([varchar](19),getdate(),(120)) NULL
)
GO
以下为PowerShell将Windows日志写入数据库脚本
#配置信息
$Database = 'EventLog'
$Server = 'localhost'
$UserName = 'eventlog'
$Password = 'Security2024'
$Hostname =($env:COMPUTERNAME).Trim("`t`n`r").replace(" ","")
$HostIP =((ipconfig|select-string "IPv4"|out-string).Split(":")[-1]).Trim("`t`n`r").replace(" ","")
#创建连接对象
$SqlConn = New-Object System.Data.SqlClient.SqlConnection
#使用账号连接MSSQL
$SqlConn.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;user id=$UserName;pwd=$Password"
#或者以 windows 认证连接 MSSQL
#$SqlConn.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;Integrated Security=SSPI;"
#打开数据库连接
$SqlConn.open()
#获取安全日志
#获取前一天日志
$items=Get-EventLog -LogName "Security" -after ((Get-Date).AddDays(-1).ToString("MM-dd-yyyy")+" 00:00:00")
##遍历日志
foreach($item in $items)
{
$LogIndex=$item.Index.tostring()
$LogTime=$item.TimeWritten.tostring("yyyy-MM-dd HH:mm:ss").replace("'","")
$LogEntryType=$item.EntryType.tostring()
$LogInstanceId=$item.InstanceID
$LogSource=$item.Source.tostring().replace("'","")
$LogMessage=$item.Message.replace("'","")
#获取详细日志
#$itemdetail=Get-EventLog -LogName "Security" -Index $LogIndex | Select-Object -Property *
#将日志写入数据库
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.connection = $SqlConn
$SqlCmd.commandtext = "INSERT INTO [dbo].[SecurityLog]([LogIndex],[LogTime],[LogEntryType],[LogInstanceId],[LogSource],[LogMessage],[Hostname],[HostIP])VALUES($LogIndex,'$LogTime','$LogEntryType','$LogInstanceId','$LogSource','$LogMessage','$Hostname','$HostIP');"
$SqlCmd.executenonquery()
}
#关闭数据库连接,退出脚本
$SqlConn.close()
Exit
以上脚本只是将Windows日志写入到数据库里,如果需要具体拆分分析日志,就需要自己额外增加脚本或者程序。
脚本保存完毕,可以再做一个任务计划,每天晚上定时执行PowerShell脚本,但是有一点,PowerShell脚本设置任务计划没有dos bat脚本设置方便。
以下为重点:
在操作的选项卡中需要选择程序或脚本位置:C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe
添加参数(可选):-NonInteractive "D:\Shell\logtodb.ps1"
具体步骤可以参考网上教程。
- 暂时没有与之相关的文章