Zum Inhalt wechseln


Foto

SQL Tabellen


  • Bitte melde dich an um zu Antworten
30 Antworten in diesem Thema

#1 bergesel

bergesel

    Senior Member

  • 372 Beiträge

 

Geschrieben 09. Juli 2008 - 09:28

halli hallo

dieses script erstellt mir im SQL Tabellen von CLients. Und in diese Tabellen sollten dann die entsprechenden eventlogs abgelegt werden.
trComputer = "[%computername%]"

Set WshNetwork = WScript.CreateObject("WScript.Network")


set db = CreateObject("ADODB.Connection")
db.Open("Provider=SQLOLEDB.1;Data Source=Server;UID=sa;PWD=xxxx")
sql = "use wartung;"
db.Execute(sql)

sql=  "IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'" & strComputer & "') "
sql=sql & "AND OBJECTPROPERTY(id, N'IsUserTable') = 1) "
sql=sql & "CREATE TABLE " & strComputer & " (Category int NOT NULL , ComputerNameEV varchar (30) NULL , Eventcode varchar (30) NULL , Message varchar (30) NULL ,"
sql=sql & "Recordnumber int NULL , Sourcename int NULL ,"
sql=sql & "timewritten int NULL , ntype int NULL , nuser int NULL );"

db.Execute (sql)
db.close

somit habe ich von allen PC Systemen in der DB Wartung eine Tabelle mit entsprechenden clients vorhanden. soweit so gut...nun möchte ich die eventlogs entsprechend in SQL Tabellen der Systeme speichern und danach das event leeren.

für das event zu schreiben habe ich folgendes script. bitte verschohnt mich damit, dass man die events im log bleiben sollen. ich will es so ;-)
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

Set db = CreateObject("ADODB.Connection")
db.Open("Provider=SQLOLEDB.1;Data Source=Server; Trusted_Connection=Yes;Initial Catalog=wartung;User ID=sa;Password=xxx;")
sql = "use wartung;"
db.Execute(sql)
'set rs = 

  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)
Next
'db.close

nur bei insert into strcomputer versteht er das nicht ganz :)
wo ist mein problem?

vielen dank für hilfe!

#2 Christoph35

Christoph35

    Expert Member

  • 3.624 Beiträge

 

Geschrieben 09. Juli 2008 - 09:36

Ich denke das sollte dann so formuliert werden:

sql = "INSERT INTO " + strcomputer + "(Category...)"

Sonst wird strcomputer nicht ausgewertet.

Christoph
MCSE+M+S, VCP, MCITP Enterprise Admin.
Always look on the bright side of life!

#3 bergesel

bergesel

    Senior Member

  • 372 Beiträge

 

Geschrieben 09. Juli 2008 - 10:45

ok danke werd ich mal testen

danke

bekomme immer noch die selbe meldung:
Script: c:\document and settings\meinprofil\localsettings\temp\2\meinclientsc.vbs
Line:3
char:1
error: the remote server machine does not exist or is unavailable: 'GetObject'
code:800A01CE
Source: Microsoft VBScript runtime error

...ist es möglich das ich mit den tabellen ein durcheinander habe in den scripts?
ich mein jetzt nicht, dass die spalten nicht übereinstimmen sondern ob die anweisung in die spezifischen tabellen nicht korrekt sind. das er vielleicht mit der variable strcomputer trotzdem nicht "weis" zu welcher tabelle er es einfügen soll?

#4 NilsK

NilsK

    Expert Member

  • 12.334 Beiträge

 

Geschrieben 09. Juli 2008 - 13:22

Moin,

bekomme immer noch die selbe meldung:


nein, es ist offensichtlich eine andere.

Line:3
char:1
error: the remote server machine does not exist or is unavailable: 'GetObject'


In Zeile 3 versuchst du ein WMI-Objekt zu erzeugen für den Computer, dessen Name in trComputer hinterlegt ist. Der String, der dort drinsteht, lautet: "[%computername%]" - und so heißt ganz gewiss kein Windows-Computer.

Kann es sein, dass Scripting nicht deine Domäne ist? Dann würde ich an deiner Stelle nicht unbedingt die Eventlogs durch ein Skript löschen lassen ...

Gruß, Nils

Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#5 bergesel

bergesel

    Senior Member

  • 372 Beiträge

 

Geschrieben 09. Juli 2008 - 13:46

betreff trcomputer ist copy/paste fehler. danke trotzdem. ist aber richtig im script!

was "[%computername%]" betrifft hast du leider keine ahnung! dies ist ein eine variable aus einer software. ist wie "." alles klar?
behaupte nur sachen was du auch wirklich weist!

deine dumme bemerkungen kannst du dir sparen.

#6 Christoph35

Christoph35

    Expert Member

  • 3.624 Beiträge

 

Geschrieben 09. Juli 2008 - 13:51

Off-Topic:
Ich glaube kaum, dass man Nils als Betreiber von FAQ-O-MATIC.NET Ahnungslosigkeit unterstellen könnte... :suspect:


faq-o-matic.net
MCSE+M+S, VCP, MCITP Enterprise Admin.
Always look on the bright side of life!

#7 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 09. Juli 2008 - 14:03

was "[%computername%]" betrifft hast du leider keine ahnung! dies ist ein eine variable aus einer software. ist wie "." alles klar?
behaupte nur sachen was du auch wirklich weist!


Dass das eine Variable aus einer Software ist, glaub ich gerne.
Dass man auf Umgebungsvariablen aus einem VB-Script genauso zugreift, wie mittels DOS-Batch... glaub ich jedoch nicht!

Mach doch vorsichtshalber mal unter die Zeile mit der strComputer-Zuweisung eine
MsgBox strComputer

Steht da dann wirklich der korrekte Computername?
My name is Frank, you can say you to me.

#8 bergesel

bergesel

    Senior Member

  • 372 Beiträge

 

Geschrieben 09. Juli 2008 - 14:16

es steht bei beiden den falschen computername(keiner) :) drin wen ich die MsgBox strComputer benutze.

1x bekomme ich nur den punkt
1x bekomme ich [%computername%]

aber danke für eure ansätze :)

#9 NilsK

NilsK

    Expert Member

  • 12.334 Beiträge

 

Geschrieben 09. Juli 2008 - 14:24

Moin,

behaupte nur sachen was du auch wirklich weist!
deine dumme bemerkungen kannst du dir sparen.


okay, dann weiß ich ja jetzt, dass ich dich künftig besser ignoriere.

Kopfschüttelnd,

Nils

Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#10 bergesel

bergesel

    Senior Member

  • 372 Beiträge

 

Geschrieben 09. Juli 2008 - 14:26

@cybquest

du hast doch mal mein script auch schon angepasst mit zeit und defrag usw. so falls du dich noch erinnerst.
dort ist als strcomputer auch "[%computername%]" und dies funktioniert :)

richtiger pc name

habe erstmals den fehler gefunden wieso der nicht den pc namen richtig anzeigt. dies muss richtig geschrieben werden so:"[%ComputerName%]" und nicht so "[%computername%]" :)

#11 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 09. Juli 2008 - 14:29

Der Punkt ist übrigens keine Variable, sondern ein Punkt!
Und der funktioniert nur für "GetObjekt" um auf den lokalen Computer zuzugreifen!

Für deine SQL-Statements solltest du dir auf jeden Fall eine korrekte Variable hernehmen.

EDIT: Schau Dir die Scripte von "damals" nochmal genau durch. Irgendwo wird die Variable Computername gesetzt! Und den Teil hast du vermutlich bei diesen Scripten vergessen.

EDIT2:
Nur mal so als "Anregung" aus einem alten Post
strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_ComputerSystem",,48)
    
For Each objItem in colItems 
strComputer = objItem.DNSHostName
Next


My name is Frank, you can say you to me.

#12 Dr.Melzer

Dr.Melzer

    Moderator

  • 26.226 Beiträge

 

Geschrieben 09. Juli 2008 - 15:58

@ Bergesel:

bitte mässige dich in deinem Ton. Wenn du den Leuten ans Bein pinkelst die dir helfen sollen wird das im Zweifelsfall nach hinten los gehen.

Ich sehe schon einen der dir mit an Sicherheit grenzender Wahrscheinlichkeit nicht mehr supporten wird, auch wenn er die Lösung für dein Problem kennt...
Never argue with an idíot, they drag you down to their level and beat you with experience!

#13 bergesel

bergesel

    Senior Member

  • 372 Beiträge

 

Geschrieben 10. Juli 2008 - 07:58

@cybquest

die variable computerName funktioniert und schreibt auch in die entsprechende computertabelle.
bricht aber danach mit dem fehler error: incorrect syntax near 's'
code 80040e14 wieder ab mit schreiben in die tabelle.

@Dr.Melzer
Zitat von Nils: Kann es sein, dass Scripting nicht deine Domäne ist? Dann würde ich an deiner Stelle nicht unbedingt die Eventlogs durch ein Skript löschen lassen ...

hier wird mir nicht ans bein gepinkelt Dr. Melzer?
wen ich doch hier meine frage stelle für dies ist doch dieses forum da oder?
wen ich es ja wüsste würd ich hier ja nicht rein schreiben oder? also was soll dan dieser komentar von nils. ich bin hier nicht seit 1 monat dabei und hatte noch nie probleme mit user von hier! neben bei erwähnt
gruss bergesel

#14 Christoph35

Christoph35

    Expert Member

  • 3.624 Beiträge

 

Geschrieben 10. Juli 2008 - 09:39



Christoph
MCSE+M+S, VCP, MCITP Enterprise Admin.
Always look on the bright side of life!

#15 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 10. Juli 2008 - 10:38

@bergesel
Zum Anpinkel-Thema: Ich bin durchaus auch der Meinung, dass Du Nils gegenüber extrem überreagiert hast!

Zum Script: Wie man ein einfaches Debugging mittels "Msgbox" durchführt, hab ich jetzt hinreichend erwähnt. Wenn du Fehlermeldungen bekommst, bau halt einfach mal welche ein und lass dir die entspr. zusamengebastelten Strings ausgeben.
Poste diese dann gleich mit, dann können wir nach "incorrect syntax" fahnden.
My name is Frank, you can say you to me.