Mit VBS in MySQL schreiben

  • VBScript

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von bond007007james.

    Mit VBS in MySQL schreiben

    Hallo!

    Ich bin absoluter VBS-Anfänger und habe mich noch nie mit MySQL auseinandergesetzt.
    Nun habe ich die Aufgabe bekommen, die Ergebnisse, die mit diesem Code:

    Visual Basic-Quellcode

    1. Const ForReading = 1, ForWriting = 2, ForAppending = 8
    2. Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    3. Dim fso, ts, fileObj, TextLine, FileName, Computerliste, Computer, Benutzer, dateiPfad, x, fs, f
    4. dateiPfad = "serverliste.txt"
    5. x = 0
    6. Set fs = CreateObject("Scripting.FileSystemObject")
    7. Set f = fs.OpenTextFile(dateiPfad, ForReading)
    8. Do While f.AtEndOfStream <> True
    9. x = x+1
    10. ReDim Preserve myArray(x)
    11. Computer = f.Readline
    12. Set fso = CreateObject("Scripting.FileSystemObject")
    13. ' Textdatei generieren
    14. FileName = "admins.txt"
    15. fso.CreateTextFile FileName
    16. Set fileObj = fso.GetFile(FileName)
    17. ' Textstream für die Ausgabe öffnen
    18. Set ts = fileObj.OpenAsTextStream(ForWriting, TristateUseDefault)
    19. ' Admins auslesen und in Datei schreiben
    20. ts.WriteLine Computer
    21. For Each Benutzer In GetObject("WinNT://" & Computer & "/Administratoren").Members
    22. ts.WriteLine vbTab & Benutzer.name
    23. On Error Resume Next
    24. Next
    25. ' Admins (ENGL) auslesen
    26. For Each Benutzer In GetObject("WinNT://" & Computer & "/Administrators").Members
    27. ts.WriteLine vbTab & Benutzer.name
    28. On Error Resume Next
    29. Next
    30. ts.WriteLine ""
    31. loop
    32. ts.Close
    33. ts.Close
    34. Wscript.Echo "Fertig!"


    erzeugt werden, in eine bereits bestehende MySQL Datenbank zu schreiben.

    Alles was ich bereits in den Weiten des Internets gefunden habe, war mir zu komplziert :S

    Grüße!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „bond007007james“ ()

    Wenn du deine Datenbank in den ODBC-Einstelluingen eingetragen hast, gibt's eine ganz schnelle Methode:
    visualbasicscript.com/MySQL-DB…cript-Updated-m36318.aspx

    Ansonsten musst du halt einen DSN-losen ConnectionString angeben:
    connectionstrings.com
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Also ich bin jetzt schon so weit, dass ich es schaffe per Script Werte in die Tabelle der DB einzutragen. Allerdings klappt es nicht, die ausgelesenen Daten reinzuschreiben.
    Mit diesem Code wird immer nur "Computer" und "Benutzer.name" in die Tabelle geschrieben, aber nicht was in der Variable "Computer" bzw. der Variable "Benutzer.name" steht ?(

    Visual Basic-Quellcode

    1. Const ForReading = 1, ForWriting = 2, ForAppending = 8
    2. Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    3. Dim fso, ts, fileObj, TextLine, FileName, Computerliste, Computer, Benutzer, dateiPfad, x, fs, f
    4. dateiPfad = "serverliste.txt"
    5. x = 0
    6. Set fs = CreateObject("Scripting.FileSystemObject")
    7. Set f = fs.OpenTextFile(dateiPfad, ForReading)
    8. Do While f.AtEndOfStream <> True
    9. x = x+1
    10. ReDim Preserve myArray(x)
    11. Computer = f.Readline
    12. ' Verbindung zur DB herstellen
    13. Dim mConnection
    14. Set mConnection = CreateObject("ADODB.Connection")
    15. mConnection.Open "DSN=admins;" & _
    16. "Uid=XXXX;" & _
    17. "Pwd=XXXX;"
    18. Set fso = CreateObject("Scripting.FileSystemObject")
    19. ' Admins auslesen und in DB schreiben
    20. mConnection.Execute "INSERT INTO `admins-lokal` (`Servername`) VALUES ('Computer'); "
    21. For Each Benutzer In GetObject("WinNT://" & Computer & "/Administratoren").Members
    22. mConnection.Execute "INSERT INTO `admins-lokal` (`Adminname`) VALUES ('Benutzer.name'); "
    23. On Error Resume Next
    24. Next
    25. ' Admins (ENGL) auslesen
    26. For Each Benutzer In GetObject("WinNT://" & Computer & "/Administrators").Members
    27. mConnection.Execute "INSERT INTO `admins-lokal` (`Adminname`) VALUES ('Benutzer.name'); "
    28. On Error Resume Next
    29. Next
    30. ts.WriteLine ""
    31. loop
    32. ts.Close
    33. ts.Close
    34. Wscript.Echo "Fertig!"


    Aber ich glaube, das würde jetzt eher unter "Datenbankprogrammierung" fallen, oder?
    mConnection.Execute "INSERT INTO `admins-lokal` (`Servername`) VALUES ('Computer'); "
    Damit schreibst du den fixen String "Computer" in die DB.

    Visual Basic-Quellcode

    1. mConnection.Execute "INSERT INTO `admins-lokal` (`Servername`) VALUES ('" & Computer & "'); "
    Damit schreibst du, was in der Variablen Computer drin steht.

    Du musst die Variablen schon in VBS auflösen.
    Woher soll die DB wissen, was in deiner VBS-Variablen steht?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ja, dass er mit dem Code den ich geschrieben habe, "Computer" reinschreibt wusste ich, ich wusste halt nur nicht, wie ichs umschreibe dass er das reinschreibt, was in der Variablen steht.

    Aber mit deinem Code scheint es zu klappen. Ich bin gerade am Testen.

    Vielen Dank erstmal!
    Der Code sieht jetzt so aus:

    Visual Basic-Quellcode

    1. Const ForReading = 1, ForWriting = 2, ForAppending = 8
    2. Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    3. Dim fso, ts, fileObj, TextLine, FileName, Computerliste, Computer, Benutzer, dateiPfad, x, fs, f
    4. dateiPfad = "serverliste.txt"
    5. x = 0
    6. Set fs = CreateObject("Scripting.FileSystemObject")
    7. Set f = fs.OpenTextFile(dateiPfad, ForReading)
    8. Do While f.AtEndOfStream <> True
    9. x = x+1
    10. ReDim Preserve myArray(x)
    11. Computer = f.Readline
    12. ' Verbindung zur DB herstellen
    13. Dim mConnection
    14. Set mConnection = CreateObject("ADODB.Connection")
    15. mConnection.Open "DSN=admins;" & _
    16. "Uid=xxxx;" & _
    17. "Pwd=xxxx;"
    18. Set fso = CreateObject("Scripting.FileSystemObject")
    19. ' Admins auslesen und in DB schreiben
    20. For Each Benutzer In GetObject("WinNT://" & Computer & "/Administratoren").Members
    21. mConnection.Execute "INSERT INTO `admins-lokal` (`Servername`,`Adminname`) VALUES ('" & Computer & "','" & Benutzer.name & "'); "
    22. On Error Resume Next
    23. Next
    24. ' Admins (ENGL) auslesen
    25. For Each Benutzer In GetObject("WinNT://" & Computer & "/Administrators").Members
    26. mConnection.Execute "INSERT INTO `admins-lokal` (`Servername`,`Adminname`) VALUES ('" & Computer & "','" & Benutzer.name & "'); "
    27. On Error Resume Next
    28. Next
    29. loop
    30. ts.Close
    31. ts.Close
    32. Wscript.Echo "Fertig!"


    Das Problem ist jetzt nur, dass er Doppeleinträge erstellt wenn man das Skript mehrmals ausführt. Wie kann ich das verhindern?
    Und wie mache ich das? :S

    P.S.: Aber falls ein Eintrag wegfällt, würde dieser bei deiner genannten Methode doch nicht gelöscht werden, oder?

    EDIT: Hab es jetzt so umgeschrieben, dass erst der komplette Inhalt der Tabelle gelöscht wird und dann alles neu hineingeschrieben.

    Allerdings habe ich noch einen Änderungswunsch den ich nicht alleine realisieren kann. Zur Zeit werden die Server aus einer Textdatei ausgelesen die untersucht werden sollen. Jetzt sollen aber nur folgende Server ausgelesen werden:
    SELECT servername FROM `nagios-parameter` WHERE LocalAdmin=1
    Wie kann ich diesen Befehl einbinden?

    Danke =)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „bond007007james“ ()