bergesel 10 Geschrieben 10. Juli 2008 Autor Melden Teilen Geschrieben 10. Juli 2008 @Alle gut dann entschuldige ich mich bei nils hoch-offiziell, für mein überreagiertes verhalten. – ..habe mal die msgbox eingebaut. so wie es aussieht bleibt er bei nuser mit diesem fehler hängen: invalid use of null strComputer = "[%ComputerName%]" 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 hier bricht er ab mit schreiben und bringt die meldung invalid use of null Set db = CreateObject("ADODB.Connection") db.Open("Provider=SQLOLEDB.1;Data Source=server; Trusted_Connection=Yes;User ID=sa;Password=xxxx;") sql = "use wartung;" db.Execute(sql) sql = "INSERT INTO " & strcomputer & "(Category,ComputerNameEV,Eventcode,Message,RecordNumber,SourceName,TimeWritten,nType,nUser)" sql = sql & "values ('" & Category & "','" & ComputerNameEV & "','" & EventCode & "','" & Message & "','" & RecordNumber & "','" & SourceName & "','" & TimeWritten & "','" & nType & "','" & nUser & "');" db.Execute(sql) db.close next Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 10. Juli 2008 Melden Teilen Geschrieben 10. Juli 2008 Moin, gut dann entschuldige ich mich bei nils hoch-offiziell, für mein überreagiertes verhalten. okay, angenommen. Kann ja mal vorkommen. nUser = objEvent.User hier bricht er ab mit schreiben und bringt die meldung invalid use of null Kann ich nicht bestätigen. Hier läuft das problemlos durch. (Allerdings habe ich "[%ComputerName%]" ersetzt durch ".", um eine gültige WMI-Ansprache zu erzeugen. Und ich habe alle Zeilen zur Datenbankansprache auskommentiert, mangels Datenbank - die WMI-Ansprache funktioniert jedenfalls.) Du hast in deinem Originalskript nicht zufällig die Fehlerbehandlung abgeschaltet und dadurch evtl. versehentlich den Fehler der falschen Stelle zugeordnet? Darüber hinaus sieht mir aber das SQL-Statement falsch aus: sql = "INSERT INTO " & strcomputer & "(Category,ComputerNameEV,Eventcode,Message,RecordNumber,SourceName,TimeWritten,nType,nUser)" Hinter INSERT INTO muss m.E. noch VALUES stehen: sql = "INSERT INTO " & strcomputer & " VALUES(Category,ComputerNameEV,Eventcode,Message,RecordNumber,SourceName,TimeWritten,nType,nUser)" Ich habe es jedenfalls noch nie ohne verwendet, und wenn ich die Syntaxbeschreibung richtig interpretiere, ist das Schlüsselwort nicht optional (da kann ich mich aber irren): INSERT (Transact-SQL) Ganz nebenbei: Vermutlich geht es dir darum, die Events besser auswerten zu können. Vielleicht kannst du dir den SQL-Server-Import sparen und mit dem Log Parser arbeiten, der dir eine mächtige SQL-Engine für das native Eventlogformat (sowie zahlreiche andere Formate) bietet: .: www.kaczenski.de :. Download details: Log Parser 2.2 Gruß, Nils Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 10. Juli 2008 Melden Teilen Geschrieben 10. Juli 2008 ... Darüber hinaus sieht mir aber das SQL-Statement falsch aus: Hinter INSERT INTO muss m.E. noch VALUES stehen: ... Der INSERT ist so schon ok. "VALUES" steht in der nächsten Zeile ;) Wenn man nur bestimmte Spalten ansprechen will, muss man die vorher angeben. Allerdings fehlt in dem INSERT-String ein Leerzeichen vor der Klammer! ...strcomputer & "(Category... Richtig wäre: ...strcomputer & " (Category... Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 10. Juli 2008 Autor Melden Teilen Geschrieben 10. Juli 2008 @nils habe nun auch auf "." gewechselt um den gleichen stand zu haben. nun bekomme ich den fehler incorrect syntax near '('. line 40 und wen ich nun noch logparser dazu nehme hab ich gar kein plan mehr und kann sicherlich dann die domäne wechseln :) @cybquest dies habe ich angepasst oder stimmte schon :) ist es möglich das im eventlog(massage) eine datei so gekennzeichnet ist z.B 'xxx.dll' das diese hochkomas den fehler zum schreiben in sql den fehler verursachen? das script schreibt halt nur teilweise und die spalte nUser bleibt leer sollte auch nicht sein. gruss Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 10. Juli 2008 Melden Teilen Geschrieben 10. Juli 2008 Nu ja... der Hinweis "incorrect syntax near (..." würde ja schon auf ein fehlendes Leerzeichen hinweisen. Vor "values" fehlt übrigens auch noch ein Leerzeichen! Hier der kpl. korrigierte String: Ggf. mal unterhalb nen Msgbox sql... ;) sql = "INSERT INTO " & strcomputer & " (Category,ComputerNameEV,Eventcode,Message,RecordNumber,SourceName,TimeWritten,nType,nUser)" sql = sql & " values ('" & Category & "','" & ComputerNameEV & "','" & EventCode & "','" & Message & "','" & RecordNumber & "','" & SourceName & "','" & TimeWritten & "','" & nType & "','" & nUser & "');" Msgbox sql Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 10. Juli 2008 Melden Teilen Geschrieben 10. Juli 2008 Moin, Der INSERT ist so schon ok. "VALUES" steht in der nächsten Zeile ;) ... hust ... ja, manchmal sollte man die Augen öffnen. wen ich nun noch logparser dazu nehme hab ich gar kein plan mehr Nicht dazu, sondern stattdessen. Damit könntest du dir sehr viel von dem Ärger ersparen, den du beim SQL-Import hast. Denn es geht dir ja vermutlich eigentlich um die Auswertung, oder? ist es möglich das im eventlog(massage) eine datei so gekennzeichnet ist z.B 'xxx.dll' das diese hochkomas den fehler zum schreiben in sql den fehler verursachen? Nicht nur eine Datei, das kann überall im Text stehen. Das müsstest du also in deinem Skript noch maskieren. die spalte nUser bleibt leer Events müssen keine User-Angabe haben, also solltest du das abfangen (wie auch bei anderen Feldern). Gut möglich, dass da die "invalid use of NULL"-Meldung herkam. Gruß, Nils Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 10. Juli 2008 Autor Melden Teilen Geschrieben 10. Juli 2008 ..ja stimmt mit values, hab ich angepasst und die msgbox hinzugefügt. meldung: INSERT TO . (Category, usw,nuser) values ('0',alle werte,'information',"); danach fehlermeldung incorrect syntax near ( Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 10. Juli 2008 Melden Teilen Geschrieben 10. Juli 2008 Moin, meldung:INSERT TO . (Category, usw,nuser) values ('0',alle werte,'information',"); danach fehlermeldung incorrect syntax near ( also, nimm's mir bitte nicht übel, aber ich habe trotzdem den Eindruck, dass dir etwas der Hintergrund fehlt, um deine anspruchsvolle Aufgabe anzugehen. Vielleicht wäre Log Parser doch etwas für dich? Du hast jetzt den Computernamen im Skript auf "." gesetzt. Damit funktioniert die WMI-Abfrage, weil WMI den Punkt als Platzhalter für den lokalen Rechner akzeptiert. Nun geht aber dein SQL-Statement nicht mehr - kann es auch nicht. Guck es dir mal an: Du versuchst, Daten in eine Tabelle namens "." zu schreiben. Die gibt es natürlich nicht (kann es auch nicht, ist kein gültiger Name). Du musst deinem Skript also einen gültigen Computernamen übergeben. Und damit sind wir irgendwie wieder am Anfang. Als kleines Goodie: So liest man in VBS den lokalen Computernamen aus: set objNetwork = CreateObject("WScript.Network") strComputer = objNetwork.ComputerName WScript.echo strComputer Gruß, Nils Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 10. Juli 2008 Melden Teilen Geschrieben 10. Juli 2008 @bergesel Also weisst Du, ein wenig erschüttert bin ich jetzt schon! Das Thema "Computername" haben wir eigetlich zur Genüge durchgenudelt, dass du da jetzt hättest selber draufkommen müssen, oder? Lies doch bitte die Hinweise, die wir dir geben, aufmerksam durch. Genau DAS, was Nils da beschreibt, ist das Problem. Du braucht einen korrekten Computernamen für die SQL-Strings. Keinen Punkt oder sonst einen Platzhalter. Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 10. Juli 2008 Autor Melden Teilen Geschrieben 10. Juli 2008 @cybquest das meinte ich ja wegen computername, dass ich für mich den "[%Computername%]" nehmen muss für mich. @nils ok ich schau mir dies mal mit dem logparser mal an. werd ich wohl bald einträge machen mit logparser ;-) Zitieren Link zu diesem Kommentar
Christoph35 10 Geschrieben 10. Juli 2008 Melden Teilen Geschrieben 10. Juli 2008 Lies doch einfach den Computernamen mit Nils´ Codesnippet in die Variable strComputer ein, NICHT über [%computername%]. Diese Variable musst Du dann in den SQL-String einbauen, aber nicht innerhalb der Anführungszeichen. Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 21. Juli 2008 Autor Melden Teilen Geschrieben 21. Juli 2008 Hallo zusammen wollte euch nur noch meine lösung presentieren ;-) On Error Resume Next strComputer = "[%ComputerName%]" 'strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem",,48) For Each objItem in colItems 'Variablen setzen dim ComputerName 'Domäne: DNSHostname, sonst Name on error resume next ComputerName = objItem.DNSHostName if err > 0 then ComputerName = objItem.Name on error goto 0 'Ende der Hostabfrage 'msgbox computername next 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 Dim MessageFull Dim MessageCut MessageFull = Message 'MessageCut = Replace(MessageFull,"'","""") 'Message = MessageCut if len(MessageFull) > 0 then MessageCut = Replace(MessageFull,"'","!") else MessageCut = "" end if Set db = CreateObject("ADODB.Connection") db.Open("Provider=SQLOLEDB.1;Data Source=meinserver;Trusted_Connection=Yes;Initial Catalog=wartung;User ID=sa;Password=xxxx;") sql = "use wartung;" db.Execute(sql) sql = "INSERT INTO " & ComputerName & " (Category,ComputerNameEV,Eventcode,MessageCut,RecordNumber,SourceName,TimeWritten,nType,nUser)" sql = sql & "values ('" & Category & "','" & ComputerNameEV & "','" & EventCode & "','" & MessageCut & "','" & RecordNumber & "','" & SourceName & "','" & TimeWritten & "','" & nType & "','" & nUser & "');" db.Execute(sql) db.close Next hier!!!!!???? nun bekomm ich aber immer noch ne meldung und die ist am schluss bei next trotz befehl im script on error resume next wie das?: error:0x80041001 code:80041001 google suche bringt mir nicht wirklich erklärende hilfe für den code. aber ansonsten funktionierts ja, stört mich einfach! :) Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 21. Juli 2008 Melden Teilen Geschrieben 21. Juli 2008 Der Code gehört zu einem "allgemeinen Fehler"... Ich würde empfehlen, das "on error resume next" mal auszukommentieren, um den Fehler zu lokalisieren. Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 22. Juli 2008 Autor Melden Teilen Geschrieben 22. Juli 2008 @cybquest danke habe ich schon versucht und musste feststellen es liegt nicht an dem script. ich habe mich mit dem softwarehersteller kurz geschlossen. nun habe ich ihm meine sql tabellen wie ich sie mir erstellt habe mit den scripts usw. zu gestellt. er hat dies auf seinem system getestet und musste "leider" :) feststellen, dass es bei ihm problemlos funktioniert. nun weis ich das es an meinem system liegt. jemand eine idee was an meinem system faul sein kann? was kann ich prüfen, testen. eventlogs habe ich mir auch schon durchgesehen. auch im ordner C:\WINDOWS\system32\wbem\logs habe ich nach den fehler gegooglet. bin ratlos was ich auf dem server konfig muss damit dies funzt! danke für tipps und anregungen gruss bergesel Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 23. Juli 2008 Autor Melden Teilen Geschrieben 23. Juli 2008 @alle so nun funktioniert alles einwandfrei. es lag an den 2 clients mit denen ich getestet habe. danke an alle für ihre geduld :) 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.