Problem bei: Erstellen einer .exe die eine Batch mit Adminrechten starten soll (die Auswahl der Batch soll über einen Parameter erfolgen)

  • Guten Tag,
    ich möchte mit einer Batchdatei mit Parameter eine Autoit.exe aufrufen das sieht momentan so aus:
    call \\Beispielserver\Scripte\Autoit.exe \\Beispielserver\Scripte\Aufruf.bat
    ___________________
    die Autoit.exe soll dann aus dem Parameter auslesen welche Datei sie mit Adminrechten starten soll das sieht momentan so aus:
    Dim $Username, $DomainName, $Passwort, $RunProgramm, $RunPath
    $UserName = "administrator"
    $DomainName = "domain.de"
    $Password = "xxxxxxxxxxx"
    $RunProgram = $CmdLine[1]
    $RunPath = "\\Beispielserver\Scripte"

    RunAs($UserName, $DomainName, $Password, 0, $RunProgramm, $RunPath, @SW_HIDE)
    ____________________
    Das funktionier aber leider nur soweit das kurz unten in der Leiste das autoit Symbol auftaucht und wieder verschwindet,
    aber die batch nicht ausgeführt wird.
    Würde mich sehr über Hilfe freuen.
    mfg bauer

  • Hallo Bauer,

    Zitat

    Bemerkungen (aus Hilfe-Datei)

    Es ist wichtig, ein Arbeitsverzeichnis anzugeben, für den der Benutzer Zugriffsrechte hat, in dessen Kontext der Prozess ausgeführt wird, anderenfalls schlägt der Aufruf der Funktion RunAs() fehl.

    Es ist empfehlenswert, nur dann das "fremde" Benutzerprofil zu verwenden, wenn es auch wirklich benötigt wird. Es besteht eine geringe Wahrscheinlichkeit, dass das Profil unter bestimmten Bedingungen im Speicher hängen bleibt. Wenn ein Skript RunAs() benutzt, um einen Prozess unter dem SYSTEM-Account zu starten (z.B. um als Dienst zu fungieren), und ein Benutzerprofil ist aktiv, muss dafür gesorgt werden, dass das Skript nicht beendet wird, bevor der Child-Prozess geschlossen wurde.

    Benutze doch einfach RunAsWait anstelle von RunAs,

    mfg (Auto)Bert

  • Hi,
    irgendwie verstehe ich deinen Erklärungsversuch nicht.
    Also eigentlich werdem einem EXE-Programm Parameter mitgegeben.

    Spoiler anzeigen

    c:\Programme\programm.exe Parameter1 Parameter2


    Getrennt durch Leerzeichen. Wie die Parameter dann im Programm verarbeitet werden findest du unter der Hilfe ($cmdline) als Tipp ;)

    Aber ich weis net was du mit einer exe und bat Datei machen möchtest. Bitte versuch es mal besser zu erklären.

    MfG
    Der_Doc

  • Also nochmal zur Verdeutlichung ich möchte nachher eine Autoit.exe haben die eine belibige Datei mit adminrechten startet.
    Die Datei soll hinter dem Aufruf-Befehl für die Autoit.exe als parmeter in einer batch angegeben sein.
    Verwendung soll das ganze in einem Anmeldescript finden, wo verschiedene Dateien per Admin gestartet werden sollen.

    Ich hab den Befehl Runas in Runaswait umgewandelt aber nichts in der Klammer verändert , der Effekt blieb der gleiche.

    Hab leider nicht viel Ahnung von Autoit, weil das mein erstes Programm ist was ich erstelle.

    mfg bauer

  • Hier schnell gebaut

    [autoit]


    if ($CmdLine[0] > 0) then
    local $username = $CmdLine[1]
    local $password = $CmdLine[2]
    local $batchfile = $CmdLine[3]

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

    RunAsWait($username, @ComputerName, $password, 0, @ComSpec & ' /c ' & $batchfile, @SystemDir,@SW_HIDE)
    if (@error <> 0) Then
    MsgBox (64,'ERROR','Wrong Password')
    EndIf
    Else
    MsgBox (64,'Wrong Parameter',@ScriptName & ' <user> <password> <batchfile>')
    EndIf

    [/autoit]

    ----------------------------------------------------------------------------------------------------------------------
    Früher musste man Drachen töten und konnte die Jungfrau heiraten.
    Heute gibt es keine Jungfrauen mehr, man muss den Drachen heiraten!

  • ok danke, aber ich wollte nicht den benutzernamen passwort ... über den parameter einlesen sondern die batch die mit dem benutzer der in der autoit.exe steht gestartet werden soll.
    Also das mit dem einlesen funktionier , dass hab ich mit einer msgbox getestet indem ich mir den parameter anzeigen lassen habe.
    Also müsste das Problem irgendwo in dem Befehl sein:
    RunAsWait($UserName, $DomainName, $Password, 0, $RunProgram, @SystemDir, @SW_HIDE)


    mfg Bauer

    Einmal editiert, zuletzt von Bauer (14. Oktober 2009 um 15:43)

  • hab mein script ein wenig angepasst hab aber immer noch das problem das die datei startet aber nich den befehl ausführt

    Spoiler anzeigen


    local $UserName = "administrator"
    local $DomainName = "domain.de"
    local $Password = "xxxxxxxxxxxxx"
    if ($CmdLine[0] = 1) then
    local $RunProgram = $CmdLine[1]
    RunAsWait($UserName, $DomainName, $Password, 0, @ComSpec & " /c " & $RunProgram, @SystemDir, @SW_HIDE)
    if (@error <> 0) Then
    MsgBox (64,"Wrong Parameter", "Diesen Parameter haben sie eingegeben" & $RunProgram)
    EndIf

    Else
    MsgBox (64,"Wrong Parameter", "Sie haben entweder keinen oder mehr als einen Parameter eingeben)
    EndIf

    was stimmt mit dem script nicht hab schon viele verschiedene versucht, aber es will einfach nich funktioniern.
    mfg bauer

  • Hallo Bauer,

    wenn dshow-flag @sw_hide weggelassen wird, kann man den Fehler besser eingrenzen, also

    [autoit]

    RunAsWait($UserName, $DomainName, $Password, 0, @ComSpec & " /c " & $RunProgram, @SystemDir)

    [/autoit]

    . Welcher Fehler wird denn dann ausgegeben?

    mfg (Auto)Bert

  • Hi!

    Hier ein Script was dir helfen könnte.
    Bei Runas und auch bei RunAsWait muss man sehr genau achten, auf die Pfadangaben im Script, das man ausführen möchte!

    Spoiler anzeigen
    [autoit]


    #AutoIt3Wrapper_Change2CUI=y
    #NoTrayIcon
    If $CmdLine[0] > 1 Then
    ConsoleWrite(@CRLF & "Error: Zuviele Parameter angegeben!" & @CRLF)
    _text()
    Exit
    ElseIf $CmdLine[0] < 1 Then
    ConsoleWrite(@CRLF & "Error: Keine Datei zum Starten angegeben!" & @CRLF)
    _text()
    Exit
    EndIf
    If $CmdLine[1] = "/?" Or $CmdLine[1] = "-?" Or $CmdLine[1] = "--help" Then
    _text()
    Exit
    EndIf
    Local $run
    Local $username = "Administrator"
    Local $domain = "deine.com"
    Local $password = "Passwort"
    Local $batchfile = $CmdLine[1]
    $run = RunAs($username, $domain, $password, 0, $batchfile, @WindowsDir & "\temp", @SW_HIDE)
    If @error Then
    ConsoleWrite("Error: " & $CmdLine[1] & " konnte nicht gestartet werden")
    Exit
    EndIf
    ConsoleWrite("PID: " & $run)

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

    Func _text()
    ConsoleWrite(@CRLF & "Startet die angegebene Datei im Hintergrund mit Administratorrechten" & @CRLF & @CRLF & " " & @ScriptName & ' "[Laufwerk:][Pfad]Dateiname" [Parameter]"' & @CRLF & " Beispiel: " & @ScriptName & ' "c:\windows\system32\ping.exe localhost"' & @CRLF & @CRLF & "Bei Erfolg wird die PID angezeigt" & @CRLF)
    EndFunc

    [/autoit]

    If not :?: then ?( else :thumbup: