0

У меня есть команда powershell, которая регистрирует журналы просмотра событий с удаленного сервера Windows и помещает их в файл csv, а затем отображает его и дополнительно добавляет в базу данных (sql-сервер)Импорт пользовательских журналов событий событий Windows csv в таблицу sql

String command = "powershell.exe cd 'Path\\Output'; " 
     + "$password = get-content 'Path\\Output\\" 
     + serverClicked + "' | convertto-securestring; $username = 'administrator'; " 
     + "$cred= New-Object System.Management.Automation.PSCredential($username, $password); " 
     + "Invoke-Command -ComputerName " + serverClicked + " -Credential $cred -Authentication Default -ScriptBlock " 
     + "{ Get-EventLog -LogName " + logName + " -EntryType " + entryType + " -Newest 50 | Select-Object -Property PSComputerName, TimeGenerated, EventID, Message, Source, EntryType}" 
     + " | Out-File " + serverClicked + "." + logName + entryType + "." + curDate + ".csv; cat " + serverClicked + "." + logName + entryType + "." + curDate + ".csv"; 
System.out.println(command); 

Process powerShellProcess; 
powerShellProcess = Runtime.getRuntime().exec(command); 
powerShellProcess.getOutputStream().close(); 
String line; 
System.out.println("Output:"); 
BufferedReader stdout = new BufferedReader(new InputStreamReader(powerShellProcess.getInputStream())); 
ShowInfoTextArea.setText("\n"); 

//------------------------------------ 
//Going to try adding the data to the database 
DBConnect d = new DBConnect(); 
Connection con = d.getConnection(); 
Statement stmt = con.createStatement(); 
stmt.executeQuery("INSERT INTO EventViewer(TimeGenerated, EventID, Message, Source, EntryType, PSComputerName) VALUES ('" + timeGenerated + "', '" + eventID + "', '" + message + "', '" + source + "', '" + entryType2 + "', '" + pSComputerName + "');"); 
System.out.println("INSERT INTO EventViewer(TimeGenerated, EventID, Message, Source, EntryType, PSComputerName) VALUES ('" + timeGenerated + "', '" + eventID + "', '" + message + "', '" + source + "', '" + entryType2 + "', '" + pSComputerName + "');"); 
stmt.close(); 
stmt.close(); 
con.close(); 
//------------------------------------ 

Этот код запускает команду Powershell и принимает вывод в файл CSV, а затем я должен принять этот вывод и поместить его в отдельные поля в настройки базы данных, как:

[TimeGenerated] [varchar](50) NOT NULL, 
[EventID] [varchar](50) NOT NULL, 
[Message] [varchar](500) NOT NULL, 
[Source] [varchar](50) NOT NULL, 
[EntryType] [varchar](50) NOT NULL, 
[PSComputerName] [varchar](50) NOT NULL, 
[LogName] [varchar] (50) NOT NULL 

Либо я нужно выяснить Java, чтобы получить его правильно в базу данных или лучший способ сделать это. Основная проблема я столкнулся в том, что часть сообщения о событии на нескольких строках

Спасибо за помощь заранее

ответ

0

я не могу проверить это, но я мог видеть проблему с выходной линией

+ " | Out-File " + serverClicked + "." + logName + entryType + "." + curDate + ".csv; cat " + serverClicked + "." + logName + entryType + "." + curDate + ".csv"; 

Out-File не собирается сделать правильный CSV, а также может быть включение вопросов кодирования. Также похоже, что вы снова читаете файл. Если это так, мы можем пропустить этот шаг полностью, просто используя ConvertTo-CSV, который был разработан для работы с объектом, который вы выводите из Get-EventLog. Так что я бы изменить последнюю строку command вместо этого ...

+ " | ConvertTo-Csv -NoTypeInformation 

Это должно помочь вам рабочую копию того, что вы ищете. Если я нахожусь на правильном пути, и у вас все еще есть проблемы, мне нужно, чтобы вы отлаживали меня.

+0

Благодарим вас за ответ. Я буду проверять это в течение часа и отлаживать. Еще раз спасибо. – Josh

+0

Это работало на исправление неформатированного CSV-файла, теперь мой основной вопрос и обратно к оригиналу: как я могу взять этот csv и вводить поля в таблицу sql, я не возражаю, воссоздавая эту таблицу sql, я бы просто хотел, чтобы каждое событие в таблице sql. Пожалуйста, помогите мне с этим – Josh

+0

И спасибо за исправление форматирования – Josh