1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

VBS Befehle Verknüpfen?

Discussion in 'Programmieren' started by spook93, Apr 1, 2010.

Thread Status:
Not open for further replies.
  1. spook93

    spook93 Byte

    Hallo

    mal eine (vielleicht dumme) Frage, aber wie kann ich in VBS Befehle miteinander verknüpfen?

    In Batch macht man das ja mit &, doch in VBS funktioniert das nicht.

    Danke schon im Voraus

    spook93
     
  2. VB-Coder

    VB-Coder Megabyte

    Irgendwie steh ich gerade auf der Leitung. Kannst du mal ein Beispiel geben was du genau machen willst ?

    *Kopfkratz* Befehle verknüpfen ? Oder meinst du Zeichenketten verknüpfen ? Denn Theoretisch (je nach dem was du vor hast,) geht das mit dem und Zeichen.

    Hier mal ein einfaches Beispiel

    Code:
    DIM teil1, teil2
    
    teil1 = "den ersten teil"
    teil2 = "dem zweiten Teil"
    
    MsgBox "Ich verknüpfe hier bequem durch das und Zeichen " & teil1 & " mit " & teil2 
    
     
  3. spook93

    spook93 Byte

    Ja genau sowas hab ich gesucht!

    Will mit einer Inputbox eine Abfrage mit 2 möglichen Antworten durchführen, die Antworten als Variable setzen und diese dann ausgeben.

    Soweit war ich schon, bloß dein code hat mir noch gefehlt :bet:

    Vielen Dank!

    Und noch eine Frage: Gibt es in VBS auch 'nen GoTo - Befehl (Sprungmarke) ?

    In VB geht das aber in VBS sagt er mir immer "Anweisung erwartet"
     
  4. VB-Coder

    VB-Coder Megabyte

    GoTo gibt es in VBS nicht.

    Wenn du sagst was du vor hast kann ich dir eventuell ne Alternative nennen.
     
  5. spook93

    spook93 Byte

    am besten ich poste mal mein ganzes werk :)

    das wird bestimmt für einen Profi ziemlich durcheinander aussehen, doch ich fange ja auch gerade erst an ;)

    Code:
    on error resume next
    
    dim account, passwort, fso, File, sText
    
    Const ForWriting = 2
    
    set wshell = CreateObject("WScript.Shell")
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Set filesys = CreateObject("Scripting.FileSystemObject")
     
    Auswahl = Inputbox("Was Wollen Sie tun?" _
    & vbCrLf & "1 = Einen Account anlegen" _
    & vbCrLf & "2 = Einen Angelegten Account löschen" _
    & vbCrLf & "3 = Hife", "AccountCreator v1.0", "")
    
    If Auswahl = 1 Then
    
    computername = WShell.ExpandEnvironmentStrings("%computername%")
    if filesys.FolderExists("\\" & computername & "\Admin$\System32") then
    wshell.popup "Du bist Administrator! Das Programm wird fortgesetzt...",5,"Fenster schließt in 5 Sekunden" 
    else
    wshell.popup "Du bist NICHT Administrator! Das Programm wird beendet...",5,"Fenster schließt in 5 Sekunden" 
    wscript.quit
    end if
    
    Do
    
    account = inputbox ("Bitte geben Sie den Benutzernamen Ihres neuen Accounts ein!","Name?","Admin")
    if account.text = "" then
    msgbox "Sie müssen einen Benutzernamen eingeben!",vbOkOnly + vbCritical,"Fehler"
    Loop While account
    end if
    next
    
    Do
    
    passwort = inputbox ("Bitte geben Sie das Passwort Ihres neuen Accounts ein!","Passwort?","password")
    if password.text = "" then
    msgbox "Wollen Sie wirklich kein Passwort vergeben?",vbYesNo + vbQuestion,"Frage"
    end if
    next
    
    if vbYes then
    wshell.popup "Wird gespeichert...",5,"Fenster schließt in 5 Sekunden" 
    else
    Loop While passwort
    end if
    next
    
    msgbox "Ihre Anmeldedaten lauten: """&account&""" ""und"" """&passwort&"""",64,"Ihre Anmeldedaten" 
    set File1 = fso.OpenTextFile("acc.tmp", ForWriting, true)
    sText1 = ""&account&""
    File1.WriteLine(sText1)
    File1.Close
    set File2 = fso.OpenTextFile("pass.tmp", ForWriting, true)
    sText2 = ""&pass&""
    File2.WriteLine(sText2)
    File2.Close
    wshell.run "UserAdd.bat", 0, True
    wshell.popup "Wird gespeichert...",5,"Fenster schließt in 5 Sekunden" 
    fso.GetFile("UserAdd.bat").Delete
    msgbox "Der Account wurde erfolgreich angelegt",64,"Fertig!"
    
    Else 
    
    If Auswahl = 2 Then
    
    Do
    
    account = inputbox ("Bitte geben Sie den Benutzernamen Ihres angelegten Accounts ein!","Name?","Admin")
    if account.text = "" then
    msgbox "Sie müssen einen Benutzernamen eingeben!",vbOkOnly + vbCritical,"Fehler"
    Loop While account
    end if
    next
    
    set File1 = fso.OpenTextFile("acc.tmp", ForWriting, true)
    sText1 = ""&account&""
    File1.WriteLine(sText1)
    File1.Close
    wshell.run "DeleteUser.bat", 0, True
    wshell.popup "Wird gespeichert...",5,"Fenster schließt in 5 Sekunden" 
    fso.GetFile("DeleteUser.bat").Delete
    msgbox "Der Account wurde erfolgreich gelöscht",64,"Fertig!"
    
    Else 
    
    If Auswahl = 3 Then
    
    wshell.run "readme.txt"
    
    End If
    End If
    End If

    Leider sind da noch ein paar Fehler drinn.

    Hab bei Google inzwischen die Do-Loop-Methode gefunden, doch ich erhalte ständig den Fehler "do ohne loop" :confused:
     
  6. Urs2

    Urs2 Megabyte

    Hallo Spook

    Ich habe nicht geschaut, ob Dein Code allenfalls funktionieren könnte, zuerst musst Du darin für logische Ordnung sorgen >>>

    Du hast Code-Teile an verschiedenen Orten gesammelt.
    Das ist der normale Weg, man muss das Rad nicht immer wieder neu erfinden wollen...
    ...aber man muss dann diese Teile, die ja kleine eigene Progrämmchen sind, zusammenhalten, sonst ergeben sie keinen Sinn.

    Dazu müssen bei mehrschichtigen Codes die einzelnen Schichten mit Tabulator geschrieben werden. Dem Script-Interpreter ist das egal, aber Dir nicht > DEIN Gedächtnis ist nicht so gut wie seines.
    Nur so kannst Du sofort sehen, ob alle Do/Loop-Schleifen oder If/Then-Abfragen auch richtig abgeschlossen wurden... und nur so können fremde Leute den Code auch vernünftig lesen...

    Im Prinzip so >>>
    Code:
    If bla1 = z Then
        blabla
        If bla2 = y Then
            Do
                bleble
                If bla3 = x Then
                    Do
                        blibli
                        bloblo
                        blublu
                    Loop Until w > v
                Else
                    U = t
                End If
                s = U ^ 2
                If s > 0 Then Exit Do
            Loop
        ElseIf bla2 = p Then
            s = m
        Else
            MsgBox "mierda"
        End If
    Else
        MsgBox "bravo"
    End If
    
    So siehst Du bei Dir, dass Zeilen aus Do-Schleifen und If-Abfragen ineinander greifen >>> Do > If > Loop > End If
    Das dürfen sie nicht.

    Auch das Schleifenwort Next fällt dann auf, es beendigt eine Schleife, die es gar nicht gibt.
    Die vielen Next stammen wohl aus Versuchen mit einer For/Next-Schleife >>> weg damit.

    Wenn das einmal zerpflückt und geordnet ist, wirst Du selbst Fehler entdecken, für den Rest sind wir dann hier...


    Nur noch soviel zu Deinem Code >>>

    account = InputBox("Bitte geben Sie.....Benutzernamen...",........)
    If account.Text = "" Then
    >>> account ist eine Variable, es muss also heissen >
    If account = "" Then

    Mit diesen Inputboxen in Do/Loop-Schleifen vergewaltigst Du den User ...wenn der Code denn richtig funktionieren würde...

    1. wird der Code nie "" zurückgeben, entweder gibt er die User-Einagbe zurück... oder dann halt "Admin", das hast Du ja explizit als Default-Eingabe gesetzt. Nur wenn der User zuerst den Default löscht und dann nichts eingibt, kommt "", oder bei "Abbruch"...

    2. kann der User bei der Eingabe merken, dass ihm eine Angabe noch fehlt, dann muss er aussteigen können...
    ...sonst bleibt er in der Do/Loop-Schleife gefangen bis zu seiner Pensionierung...

    Ich würde das ohne Do/Loop und ohne Default-Eingabe einfach so machen >
    account = InputBox("Bitte geben Sie den Benutzernamen Ihres neuen Accounts ein!", "Name?")
    If account = "" Then wscript.Quit

    "Abbrechen" oder keine Eingabe liefert dann "" ......und der Script beendet sich.
    Wenn ein vertrottelter User meint, er könne ohne Eingabe weiterkommen... dann hat er wieder etwas gelernt !

    Gruss Urs
     
    Last edited: Apr 2, 2010
  7. chipchap

    chipchap Ganzes Gigabyte

    Falscher Thread, sorry !
     
  8. VB-Coder

    VB-Coder Megabyte

    Grundlegend würde ich das ganze so aufbauen
    Kommentare findest du im Code.

    Code:
    ON Error Resume Next
    
    DIM Aktion,Benutzer,Passwort
    
    Aktion = InputBox("Was wollen Sie tun ?" &vbCrlf & "1 = Account anlegen" &vbCrlf & "2 = Account löschen" &vbCrlf & "3 = Hilfe","Account Creator","3")
    
    SELECT CASE Aktion
        CASE 1
        MsgBox "Es wird ein neuer Account angelegt."
        Do Until Benutzer > ""
        Benutzer = InputBox("Bitte geben Sie den Benutzernamen für den neuen Account ein !","neuen Benutzer erstellen","Testaccount")
        Loop
        Do Until Passwort > ""
        Passwort = InputBox("Bitte geben Sie das Benutzerpasswort für den neuen Account ein !","neuen Benutzer erstellen","geheimesPasswort")
        Loop
        MsgBox "Neuer Account wird mit folgenden Daten erstellt..." &vbcrlf & "Benutzername:" & " " & Benutzer &vbCrlf & "Benutzerpasswort:" & " " & Passwort
        
        'Hier kommt dann der ganze Code zum Anlegen des Accountes hin
        
        CASE 2
        MsgBox "Es soll ein Account gelöscht werden"
        'Hier kommt der Code zum Löschen des Accountes hin
        CASE 3
        MsgBox "Sie benötigen also Hilfe"
        'Hier kommt der ganze Code für die Hilfe hin
        CASE ELSE
        MsgBox "Nanu ! Hier stimmt was nicht. Sie haben sich weder für Punkt 1, noch für Punkt 2 und auch nicht für Punkt 3 entschieden"
        'Hier das was passiert wenn die Eingabe nicht 1, 2 oder 3 war.
        'Anmerkung: Ich würde dann autom. die Hilfe öffnen
        'Demzufolge könnte man auch Case 3 rausnehmen und die Hilfe direkt unter Case Else setzen
        'Das würde bewirken das der User automatisch die Hilfe vorgesetzt bekommt, wenn er etwas anderes wie 1 oder 2 wählt
    END SELECT
    
     
  9. spook93

    spook93 Byte

    wow!

    @ urs2: werd ich mal so machen, seh selber net mehr durch :eek:

    @ vbcoder: danke werd ich gleich mal ausprobieren
     
  10. Urs2

    Urs2 Megabyte

    Hallo Spook

    Es widerstrebt mir, InputBoxen als Optionsfelder zu missbrauchen, Aerger ist damit oft auch schon programmiert.
    VBS bietet natürlich nur beschränkte Möglichkeiten, aber >>>

    Auf der Basis von VB-Coders Vorschlag habe ich die erste InputBox ersetzt, nachher geht es weiter mit seinem (und Deinem) Code.
    Das Problem mit der Hilfe-Datei ist so auch gleich gelöst.

    Code:
    Dim wShell, fso, filesxs, Action, HelpEsc
    
    Set wShell = CreateObject("WScript.Shell")
    	'diese beiden Set werden dann erst von Deinem Code benötigt
    'Set fso = CreateObject("Scripting.FileSystemObject")
    'Set filesys = CreateObject("Scripting.FileSystemObject")
    
    
    Action = MsgBox("Wollen Sie einen neuen neuen Account anlegen ?" & vbCr & vbCr & _
                    "Neuer Account   >> Button 'JA' drücken" & vbCr & vbCr & _
                    "Account löschen >> Button 'NEIN' drücken..." & vbCr & vbCr & _
                    "Abbrechen oder Hilfe aufrufen >> Button 'Abbrechen' drücken...    " & vbCr, _
                    vbYesNoCancel, "Was soll gemacht werden  ?")
    
        'Rückgabe der Buttons >> Ja = 6, Nein = 7, Abbruch = 2
    Select Case Action
        Case 2
            HelpEsc = MsgBox("Wollen Sie den Vorgang abbrechen ?      " & vbCr & vbCr & _
                    "JA beendigt den Vorgang komplett." & vbCr & vbCr & _
                    "NEIN bricht diesen Vorgang ab..." & vbCr & _
                    "...und öffnet die Hilfedatei..." & vbCr, _
                    vbYesNo, "Was soll gemacht werden ?")
            If HelpEsc <> 6 Then
                wscript.Quit
            Else
                wShell.Run "notepad.exe c:\temp\readme.txt"
            End If
        Case 6
            'dein code für neuen account
            '
            '
        Case 7
            'dein code zum account löschen
            '
            '
        Case Else
    		'Else gibt es zwar nie, aber man weiss ja nie...
            wscript.Quit
    End Select
    Du kannst diesen Code so wie er ist als VBS laufen lassen, dann kannst Du sehen ob Dir das Resultat passt.
    Da Dein Code darin fehlt, kann er nichts ausführen.
    Wenn Du irgend eine "readme.txt" in c:\temp setzt, wird er diese öffnen, sonst zeigt er einen Fehler...

    Gruss Urs
     
  11. VB-Coder

    VB-Coder Megabyte

    Hier mal meine Version. Ist jetzt ungetestet, sollte aber funktionieren und das gute daran ist, das du dir die Batch Datei sparen kannst.

    Code:
    ON Error Resume Next
    
    DIM Aktion,Benutzer,Passwort
    set wshell = createObject("WScript.Shell")
    
    Aktion = InputBox("Was wollen Sie tun ?" &vbCrlf & "1 = Account anlegen" &vbCrlf & "2 = Account löschen" &vbCrlf & "3 = Hilfe","Account Creator","3")
    
    SELECT CASE Aktion
        CASE FALSE
        'Abbrechen wurde geklickt
            MsgBox "Sie haben sich entschieden die Aktion abzubrechen." &vbcrlf & "Die Anwendung wird beendet.",16,"Abbruch der Anwendung"
        CASE 1
        'Ein neuer Account wird erstellt
            
            'Abfrage des Benutzernamens
            Do Until Benutzer > ""
                Benutzer = InputBox("Bitte geben Sie den Benutzernamen für den neuen Account ein !","neuen Benutzer erstellen","Testaccount")
                IF Benutzer=FALSE THEN EXIT Do
            Loop
            
            'Abfrage des Benutzer Passworts
            Do Until Passwort > ""
                IF Benutzer=FALSE THEN EXIT Do
                Passwort = InputBox("Bitte geben Sie das Benutzerpasswort für den neuen Account ein !","neuen Benutzer erstellen","geheimesPasswort")
                IF Passwort=False THEN EXIT Do
            Loop
        'Benutzer und/oder Passwort existieren nicht
        IF Benutzer=FALSE OR Passwort=FALSE THEN WScript.Quit
        IF Benutzer>"" AND Passwort>"" THEN
        'Benutzername und Passwort wurden angegeben
        'Das Erstellen des Account's beginnt hier
        wshell.run("net user" & Benutzer & " " & Passwort & " " & "/ADD")
        End IF
        
        CASE 2
        'Hier kommt der Code zum Löschen des Accountes hin
        'Abfrage des Benutzernamens
            Do Until Benutzer > ""
                Benutzer = InputBox("Bitte geben Sie den Benutzernamen für den zu löschenden Account ein !","Account löschen","Testaccount")
                IF Benutzer=FALSE THEN EXIT Do
            Loop
            
            'Abfrage des Benutzer Passworts
            Do Until Passwort > ""
                IF Benutzer=FALSE THEN EXIT Do
                Passwort = InputBox("Bitte geben Sie das Benutzerpasswort für den zu löschenden Account ein !","Account löschen","geheimesPasswort")
                IF Passwort=False THEN EXIT Do
            Loop
        'Benutzer und/oder Passwort existieren nicht
        IF Benutzer=FALSE OR Passwort=FALSE THEN WScript.Quit
        IF Benutzer>"" AND Passwort>"" THEN
        'Benutzername und Passwort wurden angegeben
        'Das Löschen des Account's beginnt hier
        wshell.run("net user" & Benutzer & " " & Passwort & " " & "/DELETE")
        End IF
        
        CASE 3
        'Hier kommt der ganze Code für die Hilfe hin
        wshell.run("notepad.exe e:\tst\readme.txt")
        CASE ELSE
        MsgBox "Ihre Eingabe war ungültig." &vbcrlf & "Die Anwendung wird geschlossen.",16,"Fehlerhafte Eingabe"
        WScript.Quit
        END SELECT
    
     
  12. spook93

    spook93 Byte

    Funktioniert wunderbar!

    Nochmal vielen Dank an alle!

    Bin fast wunschlos glücklich

    der letzte schliff wäre natürlich noch wenn man die buttons der msgbox umbennen könnte.

    doch soviel ich weiß geht das in vbs gar nicht oder nur sehr schwer

    eine alternative wäre natürlich vb

    hab auch vb 2008 express doch bin da noch ein absoluter anfänger^^

    danke nochmal!

    mfg spook93

    EDIT: Danke @vbcoder werds gleich mal testen!
     
  13. VB-Coder

    VB-Coder Megabyte

    Die Buttons in VBS umzubenennen ist nicht möglich. Dazu bräuchte es dann schon VB.

    Aber da du VB2008 hast, frag ich mich warum du es nicht einfach nutzt. Da hast du doch viel mehr Möglichkeiten. auch im Bezug auf Erweiterung etc. Außerdem könntest du dann ein Programm erstellen wo dir nicht wie bei der VBS Datei jeder im Source-Code rumfummeln kann.
     
  14. spook93

    spook93 Byte

    weil ich *leider* noch nicht soviel ahnung davon habe

    fange gerade erst an

    kann auch nicht jeder. entweder erstelle ich eine vbe oder ich nehme scriptcryptor (http://www.abyssmedia.com/scriptcryptor/) um eine exe draus zu machen
     
Thread Status:
Not open for further replies.

Share This Page