bergesel 10 Geschrieben 30. April 2008 Melden Teilen Geschrieben 30. April 2008 Hallo zusammen ich habe hier ein script was mir das eventlog in eine SQL DB schreiben soll. nun bekomme ich ein fehler mit der Zeile "DSN=eventlog". meine frage ist nun was muss ich bei DSN eingeben oder was ist falsch daran. ist fast org. script von script portable. ich weis zwar was DSN heisst abe nicht auf was er die Source bezieht! danke um hilfe hier mein script: Set objConn = CreateObject("ADODB.Connection") Set objRS = CreateObject("ADODB.Recordset") objConn.Open "DSN=EventLogs;" "!!!!hier bekomm ich die fehlermeldung!!!!" objRS.CursorLocation = 3 objRS.Open "SELECT * FROM tabelle1" , objConn, 3, 3 strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colRetrievedEvents = objWMIService.ExecQuery _ ("Select * from Win32_NTLogEvent") For Each objEvent in colRetrievedEvents objRS.AddNew objRS("Category") = objEvent.Category objRS("ComputerName") = objEvent.ComputerName objRS("EventCode") = objEvent.EventCode objRS("Message") = objEvent.Message objRS("RecordNumber") = objEvent.RecordNumber objRS("SourceName") = objEvent.SourceName objRS("TimeWritten") = objEvent.TimeWritten objRS("Type") = objEvent.Type objRS("User") = objEvent.User objRS.Update Next objRS.Close objConn.Close – ...muss ich eine ODBC schnittstelle konfig? Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 6. Mai 2008 Autor Melden Teilen Geschrieben 6. Mai 2008 ...so wie es aussieht müsste ich ODBC konfig. Möchte dies aber mit dem OLE DB Provider lösen. Ich weis nur nicht wie ich das in das script einbaue! Provider=SQLNCLI.1;Integrated Security=SSPI;Persist Security Info=False;User ID=MeineUserID;Initial Catalog=wartung;Data Source=Mein Server. Das ziel ist, dass ich das eventlog in SQL Schreiben kann. Jemand ein plan? ;-) gruss Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 6. Mai 2008 Melden Teilen Geschrieben 6. Mai 2008 Ja hast Du denn eine SQL Datenbank mit entsprechenden Tabellen? Hier ein Beispiel, um eine Datenbank über'n Provider (also ohne DSN) anzusprechen: set db = CreateObject("ADODB.Connection") db.Open("Provider=SQLOLEDB.1;Data Source=MeinServer;UID=MeinUser;PWD=") sql = "use MeineDatenbank;" set rs = db.Execute(sql) Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 6. Mai 2008 Autor Melden Teilen Geschrieben 6. Mai 2008 ja ich habe eine eine DB mit den Tabellen. wie muss ich das script von oben ändern damit das funzt. bin leider noch ein laye und bin offen für hilfe! ;-) Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 6. Mai 2008 Melden Teilen Geschrieben 6. Mai 2008 Dein umgearbeitetes Script: Set db = CreateObject("ADODB.Connection") db.Open("Provider=SQLOLEDB.1;Data Source=MeinServer;UID=MeinUser;PWD=") sql = "use MeineDatenbank;" db.Execute(sql) strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colRetrievedEvents = objWMIService.ExecQuery _ ("Select * from Win32_NTLogEvent") For Each objEvent in colRetrievedEvents sql = "INSERT INTO Tabelle1 (Category,ComputerName,Eventcode,Message)" sql = sql & "values ('" & objEvent.Category & "','" & objEvent.ComputerName & "','" & objEvent.EventCode & "','" & objEvent.Message & ");" db.Execute(sql) Next db.Close "MenServer", "MeineDatenbank" u.ä. natürlich entspr. ändern. Ggf. den Provider deinen gegebenheiten anpassen (bin von MSSQL ausgegangen). Hab das mit dem Recordset durch nen direkten SQL INSERT ersetzt (nur ein paar deiner Felder... war zu Faul ;) ) ...das alles allerdings ungetestet aus´dem Bauch zusammengeschrieben ;) Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 6. Mai 2008 Autor Melden Teilen Geschrieben 6. Mai 2008 ok vielen dank teste das ntürlich selber gerne aus ;-) – hab das script auch noch ein wenig angepasst. aber hab bei dim type ein fehler, wieso das? hier mein script: strComputer = "." Set db = CreateObject("ADODB.Connection") db.Open("Provider=SQLOLEDB.1;Data Source=Mein server;UID=sa;Password=xxx;") sql = "use wartung;" db.Execute(sql) Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colRetrievedEvents = objWMIService.ExecQuery _ ("Select * from Win32_NTLogEvent") dim Category dim ComputerNameEV dim EventCode dim Message dim RecordNumber dim SourceName dim TimeWritten dim Type dim User Category = objEvent.Category ComputerNameEV = objEvent.ComputerName EventCode = objEvent.EventCode Message = objEvent.Message RecordNumber = objEvent.RecordNumber SourceName = objEvent.SourceName TimeWritten = objEvent.TimeWritten Type = objEvent.Type User = objEvent.User For Each objEvent in colRetrievedEvents sql = "INSERT INTO wartung (Category,ComputerNameEV,Eventcode,Message,RecordNumber,SourceName,TimeWritten,Type,User)" sql = sql & "values ('" & Category & "','" & ComputerNameEV & "','" & EventCode & "','" & Message & "','" & RecordNumber & "','" & SourceName & "','" & TimeWritten & "','" & Type & "','" & User & "');" db.Execute(sql) Next db.Close – hat geklappt, das problem war, das die spalte zu wenig zeichen aufnehmen konnte! Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 7. Mai 2008 Autor Melden Teilen Geschrieben 7. Mai 2008 Ich wieder mal, dass script läuft und schreibt das zeug auch schön in die tabellen bekomme dann aber eine fehlermeldung vom script die so heisst: incorrect syntax near 'HOST' Code: 80040E14 Line 39* was ist an dem syntax nicht i.O funktioniert ja! :) strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colRetrievedEvents = objWMIService.ExecQuery _ ("Select * from Win32_NTLogEvent") For Each objEvent in colRetrievedEvents dim Category dim ComputerNameEV dim EventCode dim Message dim RecordNumber dim SourceName dim TimeWritten dim nType dim nUser Category = objEvent.Category ComputerNameEV = objEvent.ComputerName EventCode = objEvent.EventCode Message = objEvent.Message RecordNumber = objEvent.RecordNumber SourceName = objEvent.SourceName TimeWritten = objEvent.TimeWritten nType = objEvent.Type nUser = objEvent.User Set db = CreateObject("ADODB.Connection") db.Open("Provider=SQLOLEDB.1;Data Source=rblpqb760; Trusted_Connection=Yes;Initial Catalog=wartung;User ID=sa;Password=xxx;") sql = "use wartung;" db.Execute(sql) sql = "INSERT INTO wartung (Category,ComputerNameEV,Eventcode,Message,RecordNumber,SourceName,TimeWritten,nType,nUser)" sql = sql & "values ('" & Category & "','" & ComputerNameEV & "','" & EventCode & "','" & Message & "','" & RecordNumber & "','" & SourceName & "','" & TimeWritten & "','" & nType & "','" & nUser & "');" db.Execute(sql) " fehler soll in dieser zeile sein?!" Next Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 7. Mai 2008 Melden Teilen Geschrieben 7. Mai 2008 Hmmm... sehe auf Anhieb nix verdächtiges. Gibts in deiner SQL-Tabelle eine Spalte Host? Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 7. Mai 2008 Autor Melden Teilen Geschrieben 7. Mai 2008 nein darum erstaunt mich das auch ein wenig mit dem HOST! was mir aber aufgefallen ist, dass wen ich das script ausführe und er in die tabellen schreibt, schreibt er anscheinend nicht alles rein. wen ich nähmlich nochmals in der tabelle rechte maus taste "sql execute" mache habe ich mehr einträge als vorher! das heisst ich habe zuerst 80'000 zeilen drin (dan diese Fehlermeldung) in der tabelle und wen ich sql execute mache 92'000. habe dann dies nochmals gemacht um zu sehen ob er noch mehr einträge macht bleibt aber bei 92'000 zeilen. noch was anders: da ich ja noch teste lösche ich die 92'000 zeilen wieder. der hat aber ewig zum löschen, woran kann das liegen? min. 1std bis die weg sind! natürlich hängt dan sql und kann dort nichts mehr machen Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 7. Mai 2008 Melden Teilen Geschrieben 7. Mai 2008 Sind die Tabellen felder alle Char bzw. Strings? Oder gibt's da z.B. auch DateTime o.ä.? Möglicherweise kommt aus einem Eventlog-Eintrag der Wert "HOST" zurück, wo sonst ein Datum steht oder so... So ein Löschproblem hab ich mal so gelöst: Um die 100k Zeilen zu löschen hab ich dann statt nem "DELETE..." einfach "DROP TABLE..." und anschliessend wieder "CREATE TABLE..." gemacht ;) Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 7. Mai 2008 Autor Melden Teilen Geschrieben 7. Mai 2008 sind alle tabellen mit nvarcharMAX definiert wegen text. aber werde die mal noch genau definieren damit der zeitstempel nicht ein nvarchar ist :) das mit dem drop to ... hab ich noch keine ahnung, muss ich mir mal ansehen damit ich es verstehe. :) Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 7. Mai 2008 Melden Teilen Geschrieben 7. Mai 2008 Zur SQL-Syntax ggf. z.B. einfach mal auf ner Microsoft Seite vorbeischauen: DROP TABLE (Transact-SQL) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.