Variablen auslesen / MsgBox bei Erfolg bzw. Problem anzeigen

  • Hallo Forum,

    ich arbeite gerade an einem größeren Script, mit dem ich meine Benutzer unterstützen will, z.B. beim Herstellen einer VPN-Verbindung, einer Terminalserververbindung, beim Remotesupport, zum Verbinden von Laufwerken etc..
    Das ganze Script ist mittlerweile mehrere Hundert Zeilen lang, so dass ich hier nur den Teil poste, wo der Fehler auftritt.

    Dieses Teilstück soll für den momentan angemeldeten Benutzer eine VPN-Verbindung herstellen und bei Erfolg oder Problem eine Meldung ausgeben.
    Das Anmeldepasswort für das VPN (entspricht dem Windows-Kennwort) soll aus SIcherheitsgründen in eine Variable gelegt und nachfolgend dann aus der Variable ausgelesen werden.

    [autoit]

    $vpnconnectusername = ENVGET("USERNAME")
    $vpnconnectpassword = InputBox("Passwortabfrage", "Bitte geben Sie Ihr Windows-Anmeldekennwort ein:", "", "*")
    Run(@ComSpec & " /c " & 'rasdial unserVPN $vpnconnectusername $vpnconnectpassword /Phonebook:res\unserVPN.pbk', "", @SW_HIDE)
    MsgBox (0, "Erfolg!", "Die VPN-Einwahl wurde erfolgreich hergestellt")

    [/autoit]

    Zeile 1: Auslesen des Benutzernamens aus einer globalen Variable - funktioniert für sich gesehen, auch das auslesen funktioniert (getestet mit einer Msgbox)
    Zeile 2: Inputfeld zur Eingabe des Passwortes und speichern in einer Variable - funktioniert für sich gesehen, auch das auslesen funktioniert (getestet mit einer Msgbox)
    Zeile 3: Über das Windowseigene Programm rasdial (eine cmd-Anwendung) soll die VPN-Verbindung hergestellt werden. Für den Benutzernamen und das Kennwort sollen die Variablen genutzt werden. Diese werden jedoch nicht ausgelesen. Wenn ich anstatt der Variablen reale Werte eintrage, kann die VPN-Verbindung hergestellt werden.
    Zele 4: Hier hänge ich total: Es soll die Erfolgsmeldung nur angezeigt werden, wenn die Einwahl auch funktioniert hat, sonst soll eine Fehlermeldung angezeigt werden.

    Vielleicht ist hier im Forum jemand, der mir weiterhelfen kann.
    Nach Fertigstellung werde ich den vollständigen Code als Projekt veröffentlichen.

    Beste Grüße
    salnet

  • Hallo salnet,

    logischerweise kommt deine MsgBox jedes mal. Du hast diese Zeile da stehen, also wird sie ausgeführt. Du kannst dies mit Hilfe einer If-Abfrage ändern. Lasse den Rückgabewert von Run in eine Variable speichern, z.B.

    [autoit]

    Local $iRval = Run(...)

    [/autoit]

    dann kannst du nach dem ausführen der Zeile Run diesen prüfen. Welche Werte dieser zurück gibt, siehst du in der Hilfe.

    So Far

    Grüße Yaerox

    Grüne Hölle

  • Besten Dank für eure Antworten.
    Das mit der If-Abfrage habe ich dank des Funktions-Referenz hinbekommen.

    Allerdings bei meinem Variablen-Problem komme ich nicht weiter - ich habe schon alle möglichen Kombinationen mit Anführungszeichen und Ticks versucht, u.a.

    [autoit]

    $vpnconnectusername = ENVGET("USERNAME")
    $vpnconnectpassword = InputBox("Passwortabfrage", "Bitte geben Sie Ihr Windows-Anmeldekennwort ein:", "", "*")
    Run(@ComSpec & " /c " & 'rasdial unserVPN" & $vpnconnectusername & $vpnconnectpassword & "/Phonebook:res\unserVPN.pbk', "", @SW_HIDE)

    [/autoit][autoit]

    $vpnconnectusername = ENVGET("USERNAME")
    $vpnconnectpassword = InputBox("Passwortabfrage", "Bitte geben Sie Ihr Windows-Anmeldekennwort ein:", "", "*")
    Run(@ComSpec & " /c " & 'rasdial unserVPN " & $vpnconnectusername & " " & $vpnconnectpassword & " /Phonebook:res\unserVPN.pbk', "", @SW_HIDE)

    [/autoit][autoit]

    $vpnconnectusername = ENVGET("USERNAME")
    $vpnconnectpassword = InputBox("Passwortabfrage", "Bitte geben Sie Ihr Windows-Anmeldekennwort ein:", "", "*")
    Run(@ComSpec & " /c " & 'rasdial unserVPN' & $vpnconnectusername & $vpnconnectpassword & '/Phonebook:res\unserVPN.pbk', "", @SW_HIDE)

    [/autoit][autoit]

    $vpnconnectusername = ENVGET("USERNAME")
    $vpnconnectpassword = InputBox("Passwortabfrage", "Bitte geben Sie Ihr Windows-Anmeldekennwort ein:", "", "*")
    Run(@ComSpec & " /c " & 'rasdial unserVPN ' & $vpnconnectusername & ' ' & $vpnconnectpassword & ' /Phonebook:res\unserVPN.pbk', "", @SW_HIDE)

    [/autoit]

    Könnte mir jemand einen Hinweis geben, wo mein Fehler ist?

    Einmal editiert, zuletzt von salnet (15. September 2013 um 16:14) aus folgendem Grund: Typo

  • Hier mal mein Vorschlag, denn nur so dürften Passworte mit beliebigen Sonderzeichen fehlerfrei funktionieren. Wenn du die Variabeln nicht in Anführungszeichen einschließt besteht immer die Gefahr, dass die Parameter falsch interpretiert werden. Ich würde außerdem vermuten, dass deine Pfadangabe beim Phonebook evtl. inkorrekt ist (evtl. mal vollen statt relativen Pfad testen oder das workingdir im run Aufruf richtig festlegen, damit der relative Pfad stimmt). Grundsätzlich solltest du immer wie unten gezeigt vorgehen, erstmal den Aufruf in die console ausgeben, dann von Hand testen ob genau diese Zeile funktioniert und wenn ja kannst du den Run Aufruf wieder einkommentieren und solltest auch den stdout prüfen, da du sonst das Ergebnis bzw. die evtl. vorhandene Fehlermeldung nicht sehen kannst.

    [autoit]


    #include <Constants.au3>
    $vpnconnectusername = ENVGET("USERNAME")
    $vpnconnectpassword = InputBox("Passwortabfrage", "Bitte geben Sie Ihr Windows-Anmeldekennwort ein:", "", "*")

    [/autoit][autoit][/autoit][autoit]

    $test = 'rasdial "unserVPN" "' & $vpnconnectusername & '" "' & $vpnconnectpassword & '" /Phonebook:res\unserVPN.pbk'
    ConsoleWrite($test & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    ;$debug = Run(@ComSpec & " /c " & $test, "", @SW_HIDE,$STDOUT_CHILD)
    ;$debug = Run(@ComSpec & " /c " & $test, @scriptdir, @SW_HIDE,$STDOUT_CHILD) ; workingdirfix????

    [/autoit][autoit][/autoit][autoit]

    #cs
    $debugout = ""
    while not @error
    $debugout &= stdoutread($debug)
    wend
    consolewrite($debugout & @crlf)
    #ce

    [/autoit]

    PS: Statt envget könntest du auch das Makro @username verwenden.

    6 Mal editiert, zuletzt von misterspeed (15. September 2013 um 18:15)