Wie realisiere ich "Ausführen als..." in AutoIt?

  • Ich hatte seinerzeit hier bereits nach einer Möglichkeit gefragt, mittels AutoIt ein Programm zu starten, das auf einem Server einen Task startet: [ gelöst ] AutoIt - Neuling benötigt Hilfe mit Batch
    Die Syntax schaut folgendermaßen aus und funktioniert als Admin fehlerfrei:


    Führe ich die Exe allerdings als User ohne Adminrechte aus, scheitert die Authentifizierung am Server, es muss ein "Ausführen als..." her. Nur, wie bzw. wo binde ich diese Option ein, PsExec muss als Admin gestartet werden? Hier fand ich eine Anregung, wie diese Option syntaktisch umgesetzt wird, allerdings führen meine Versuche stets zu Parsing- und anderen Fehlern: [ gelöst ] "RunAs" und ausführen als Administrator funktioniert nicht
    Gibt es für meine Frage eine Lösung? Ich hatte in die Zeile mit dem Aufruf von PsExec folgendes eingetragen:

    Code
    $iResult = ShellExecuteWait(RunAs("administrator", @pc-name, "password", 0,"PsExec.exe"), "\\servername\ -u domain\Administrator -p  password -accepteula schtasks /run /TN dienst-restart", "", "", @SW_HIDE)

    MfG ibicis

  • Füge am Anfang deines Skriptes

    [autoit]

    #RequireAdmin

    [/autoit]

    ein und arbeite mit

    [autoit]

    RunWait

    [/autoit]

    , dann werden die Admin-Rechte deines Skriptes automatisch an PsExec vererbt.

  • Danke sehr. Nun wird, wenn man kein Admin ist, der Auth.Dialog aufgerufen. Der Benutzer kennt das PW des Adminis nicht, er soll es auch nicht kennen. An welcher Stelle im Code hinterlege ich das PW, sodass es automatisch im Admin-Kontext ausgeführt wird, ohne dass die PW-Abfrage erscheint?

    MfG ibicis

  • Weißt du u.U., wo ich diese Option in mein Script einbinde? Ich lese bereits in der Hilfe herum, komme aber leider nicht weiter. Ich weiß nicht, wie ich RunAs vor das ShellExecuteWait einbinde bzw. ob es dort überhaupt korrekt eingefügt werden muss.

    P.S.: Wenn ich anstelle ShellExecuteWait RunAs bzw. RunAsWait einfüge, kommt zwar die Meldung, die Anforderung sei erfolgreich ausgeführt worden, dies ist aber nicht der Fall (ich teste es, indem ich einen Task aufrufe, der den Spooler beendet).

    MfG ibicis

    Einmal editiert, zuletzt von ibicis (6. Juni 2012 um 12:02)

  • Muss der Befehl RunAs in eine separate zeile eingefügt werden, danach dann ShellExecuteWait? Kann mir jemand helfen, ich weiß nicht, ob mein Vorhaben überhaupt umsetzbar ist? Danke vorab.

    MfG ibicis

  • Die Frage ist ob das wirklich willst. Autotiscripte kann jeder DAU mit einem klick decompilieren und hat damit dein Adminpasswort.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Wie wäre es wenn du dich erst einmal mit den Anfänger-Tutorials oder Pee's Autoit-Buch beschäftigen würdest?! Denn wenn du die Grundlagen beherrschen würdest, wäre dir auch klar, dass RunAs() ein eigenständiger Befehl ist und auch, dass du nur die benötigten Parameter in der Hilfe nachschlagen müsstest... ;)

    LG
    Christoph :)

  • Wie wäre es wenn du dich erst einmal mit den Anfänger-Tutorials oder Pee's Autoit-Buch beschäftigen würdest?! Denn wenn du die Grundlagen beherrschen würdest, wäre dir auch klar, dass RunAs() ein eigenständiger Befehl ist und auch, dass du nur die benötigten Parameter in der Hilfe nachschlagen müsstest... ;)

    Das ist generell eine gute Idee, nur habe ich hier bereits ein bestehendens, funktionierendes Konstrukt, in das ich den RunAs-Befehl einbinden möchte. Wie wäre es, mir zu meinen Fragen konstruktive, themenbezogene Antworten zu geben oder sich im Zweifelsfall zurückzuhalten, bevor philosophische Diskussionen über Sinn oder Unsinn diverser Vorgaben, die ich erfüllen muss, losgetreten werden?

    MfG ibicis

  • diverser Vorgaben, die ich erfüllen muss

    Merkst was? DU musst sie erfüllen also solltest DU es auch suchen und DU es lernen. Wenn Frech was fordern willst und die Hinweise über die Unsicherheit deines vorhabens nicht haben willst, dann Versuch dein Glück in den Bereich: https://autoit.de/index.php?page=Board&boardID=51

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Ich fordere nicht frech, ich erwarte nur sachbezogene Antworten zu problembezogenen Fragen. Einige User hier zeigten mir bereits, dass sie dieses Forum auch dementsprechend verstanden und in diesem Sinne handelten.


    Merkst was? DU musst sie erfüllen also solltest DU es auch suchen und DU es lernen. Wenn Frech was fordern willst und die Hinweise über die Unsicherheit deines vorhabens nicht haben willst, dann Versuch dein Glück in den Bereich: https://autoit.de/index.php?page=Board&boardID=51

    Ich merke bspw., dass Orthografie nicht zu deinen Stärken zählt und dass du Dativ und Akkusativ nicht auseinanderzuhalten vermagst. Also solltest DU es auch suchen und lernen - ich empfehle dir diese Lektüre. Alternativ hätte ich dir auch sagen können, wo konkret die Fehler liegen, aber das hätte dich 1. u.U. direkt zur Problemlösung geführt (Das wollen wir natürlich nicht. Wo bleibt denn da der Spaß?) und 2. mir zu wenig Spielraum für infantile Trollerei gelassen. Das war es von mir zu diesem Thema.*


    Nun begebe ich mich wieder weg von diesem Niveau hin zu meiner Problemfrage und poste allen, die nun noch zur themenbezogenen Diskussion bereit sind, einen Code-Schnipsel, mit dem es zu funktionieren scheint:

    Code
    Local $pid = RunAsWait("Administrator", "domain.local", @ComputerName, "password", 0, @ComSpec, @SystemDir) 
     				$iResult = ShellExecuteWait("PsExec.exe", "\\servername\ -u domain\Administrator -p password -accepteula schtasks /run /TN dienst-restart", "", "", @SW_HIDE)

    Wozu dient z.B. die Variable(?) $pid? Ohnedem scheint es nicht zu gehen; setze ich sie ein, läuft die Ausführung problemlos.
    *Ich entschuldige mich für meinen Ausrutscher am Post-Anfang,
    mir geht nur bei einer solchen Diskussions"Kultur" manchmal der Hut
    hoch, so wie gerade geschehen.

    MfG ibicis

  • Die Variable $Pid trägt in diesem Fall einen irreführenden Namen, da die Funktion RunAsWait() nicht die PID sondern den Exitcode des gestarteten Programms zurück gibt... (Kleiner Tipp: genau diese Dinge stehen in der doch sehr sehr sehr ausführlichen Hilfe/Dokumentation von Autoit)

    LG
    Christoph :)