Value wird nicht in Datei übertragen

  • VBScript

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    Value wird nicht in Datei übertragen

    Hallo!

    Habe die Suche zwar gequält, aber leider nicht das passende gefunden.

    Ich bin gerade dabei eine Custom Wizard Pane für ein Deployment zu basteln.
    Diese soll drei Eingabefelder beinhalten, wo ein Benutzername und eine Passwort eingetragen werden kann.

    Soweit sogut.

    Wenn in ein Feld etwas eingtragen wird, soll der Wert des Feldes in eine INI Datei geschrieben werden.
    Nur irgendwie tut das Script nicht ganz das, was ich will.

    Hier mal die Quelltexte...

    Code der xml Datei

    Quellcode

    1. <Wizard>
    2. <Global>
    3. <CustomScript>Test3.vbs</CustomScript>
    4. <CustomScript>DeployWiz_AdminPassword.vbs</CustomScript>
    5. </Global>
    6. <Pane id="Benutzerdaten" title="Benutzerdaten">
    7. <Body>
    8. <![CDATA[
    9. <H1>Specify the Administrator account password.</H1>
    10. <p>This password will be used for logging onto the computer after a restart.</p>
    11. <table>
    12. <tr valign=top>
    13. <td width=100>
    14. <img src="DeployWiz_Administrator.png">
    15. </td>
    16. <td width="100%">
    17. Benutzername: <br>
    18. <input type=text id="NewUser" size=20 language=vbscript onchange=Test>
    19. <label class=ErrMsg For=NewUser>* Pflichtfeld</label><br>
    20. Administrator Password: <br>
    21. <input type=password id="Password1" name="AdminPassword" size=20 language=vbscript onchange=ValidatePassword onpropertychange=ValidatePassword>
    22. <label class=ErrMsg For=Password1>* Required (MISSING)</label><br><br>
    23. Confirm Administrator Password: <br>
    24. <input type=password id="Password2" size=20 language=vbscript onchange=ValidatePassword onpropertychange=ValidatePassword>
    25. <label id=NonMatchPassword class=ErrMsg For=Password2>* Passwords do not match!</label><br><br>
    26. </td>
    27. </tr>
    28. </table>
    29. ]]>
    30. </Body>
    31. <Initialization><![CDATA[ Password2.Value = Password1.Value ]]></Initialization>
    32. <Validation><![CDATA[ValidatePassword]]></Validation>
    33. <Validation><![CDATA[Test]]></Validation>
    34. </Pane>
    35. </Wizard>



    Code der Test3.vbs

    Quellcode

    1. Option Explicit
    2. Function Test
    3. Const strFileName = "UserSettings.ini"
    4. Const ForReading = 1
    5. Const ForWriting = 2
    6. Const ForAppending = 8
    7. Const CreateNotExist = True
    8. Dim strInput, objFSO, objFile
    9. Set strInput = GetElementByID("NewUser").Value
    10. Set objFSO = CreateObject("Scripting.FileSystemObject")
    11. Set objFile = objFSO.OpenTextFile(strFileName, ForWriting, CreateNotExist)
    12. objFile.WriteLine "NewUserName=" & strInput
    13. objFile.Close
    14. Set objFile = Nothing
    15. Set objFSO = Nothing
    16. End Function


    Wenn ich strInput mit einerInputBox befüllen lasse, funktioniert es problemlos.
    Sobald ich das ganze über GetElementByID machen will, passiert nichts. Kein Error, garnichts.
    Habs auch schon mit "Document.GetElementByID" versucht, auch kein Erfolg.
    Es wird auch die INI Datei nicht erstellt.

    Hat jemand eine Idee?

    Danke

    lg
    con

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

    Gib da mal vorsichtshalber einen Pfad mit an.Wer weiß, wo der hin schreibt.

    Dann schreibt er es in den selben Pfad wie das Script.

    Wo ist die GetElementByID Methode? Die existiert so nicht in VBS. Das geht über zB XMLDOM:

    Visual Basic-Quellcode

    1. Set objXMLDoc = CreateObject("Microsoft.XMLDOM")
    2. objXMLDoc.async = False
    3. objXMLDoc.load("test.xml")

    //Edit.
    Hab mir das "XML" mal angeschaut. Dort ist ja ein CDATA Tag. Das wird dann so nix mit XMLDOM, da ja alles innerhalb von CDATA nicht als Markup gesehen wird. Das wirst wohl am einfachsten via RegEx lösen

    /edit 2.

    VB.NET-Quellcode

    1. Option Explicit
    2. Call Test
    3. Sub Test
    4. Const strFileName = "UserSettings.ini"
    5. Const ForReading = 1
    6. Const ForWriting = 2
    7. Const ForAppending = 8
    8. Const CreateNotExist = True
    9. Dim strInput, objFSO, objFile, xmlDoc
    10. dim root, node, c
    11. Set xmlDoc = CreateObject("Microsoft.XMLDOM")
    12. xmlDoc.Async = "False"
    13. dim r
    14. r = xmlDoc.Load("test.xml")
    15. if not r then
    16. msgbox "Cannot load xml"
    17. exit sub
    18. end if
    19. set root = xmlDoc.documentElement
    20. Set strInput = root.getElementsByTagName("Body")
    21. For each node in strInput
    22. For each c in node.childnodes
    23. wsh.echo c.nodename
    24. wsh.echo c.nodetype
    25. wsh.echo c.nodevalue
    26. 'oder : wsh.echo c.data
    27. Next
    28. Next
    29. Set objFSO = CreateObject("Scripting.FileSystemObject")
    30. Set objFile = objFSO.OpenTextFile(strFileName, ForWriting, CreateNotExist)
    31. objFile.WriteLine "NewUserName=" ' & strInput
    32. objFile.Close
    33. Set objFile = Nothing
    34. Set objFSO = Nothing
    35. End Sub


    So kommst du an den CDATA Text. Eventuell kannst das HTML dann wieder parsen.
    Das ist meine Signatur und sie wird wunderbar sein!

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