Funktion RunAs: Bat Datei wird nicht mit Administrativen Rechten ausgeführt

  • Hallo Leute,

    ich bin gerade dabei ein Skript zu schreiben, das ein BAT Datei samt Parameter als Administrator ausführen soll. Die Bat Datei wird auch ausgeführt, aber eben nicht mit Administrativen rechten. Benutzername und Passwort stimmen.

    Schon mal ein paar vorab Informationen:
    OS: WIN7 Home Premium
    UAC ist eingeschaltet.

    Mein bisheriger Code sieht so aus:

    Spoiler anzeigen
    [autoit]


    ;~ Varibale werden geladen
    $path = "C:\Program Files\Tools\Autologon"
    $bat = "advFirewall.exe"
    $advFirewall = $path & "\" & $bat
    $admin = "Admin"
    $pw = "*********"

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

    If FileExists($advFirewall) Then
    MsgBox(64, "Erfolg", "Die Datei " & $advFirewall & " existiert.")
    Else
    MsgBox(64, "Erfolg", "Die Datei " & $advFirewall & " existiert nicht.")
    Exit
    EndIf

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

    ;~ MsgBox(64,"", $path)
    ;~ #RequireAdmin
    RunAsWait($admin,@ComputerName, $pw, 1, $advFirewall & " AG_Beamer", $path)
    ;~ ShellExecute($advFirewall, "AG_Beamer", $path, "open", @SW_MAXIMIZE)
    ;~ Sleep(2000)
    RunAs($admin, @ComputerName, $pw, 0, "gpupdate /force", @SystemDir)
    Exit

    [/autoit]

    Der Code der aufgerufenen BAT Datei sieht ist der folgende:

    Spoiler anzeigen
    Code
    @echo off
    set user=%1
    set ScriptDir=Í%
    
    
    %systemroot%\System32\netsh.exe advfirewall import "%ScriptDir%\advfirewall_%user%.wfw"
    pause

    Als Fehlermeldung bekomme ich die folgende Meldung:

    Spoiler anzeigen
    Code
    Die Richtlinie kann nicht importiert werden (Fehler: 0x522). Stellen Sie sicher,
     dass der Dateiname richtig ist, dass auf die Datei zugegriffen werden kann und
    dass es sich dabei um eine gültige Richtliniendatei für die Windows-Firewall han
    delt.

    Wenn ich die BAT Datei über eine Administrative CMD ausführe, läuft sie erfolgreich durch.

    Ich geh mal davon aus, das die BAT Datei nicht mit Admistrativen Rechten vom AutoIt Skript aufgerufen wird.
    Wenn ich falsch liege, korrigiert mich bitte.

    Wie bekomme ich es hin, das die BAT Datei im administrativen Kontext gestartet wird?

    Danke für eure Hilfe!!


    Gruß

    0cool

    Gut das fragen nichts kostet :)

    • Offizieller Beitrag

    Ich denke das dein Problem daran liegt, das dein Script selbst nicht mit AdminStatus läuft.
    Pack mal

    [autoit]

    #RequireAdmin

    [/autoit]

    in dein Script.

  • Dann wird doch aber auch kein RunAs mehr benötigt, oder? Normalerweise werden Adminrechte doch an einen Prozess weiter gegeben der von einem Programm mit Adminrechten gestartet wird. ?(
    Was ich am ersten Beitrag nicht verstehe ist, dass nirgendwo eine Batchdatei gestartet wird.

  • Hi, um das Starten mit Adminrechten zu ermöglichen verwendet man - wie Raupi schon geschrieben hat - #RequireAdmin und fordert damit für das ganze Skript Administratorrechte an:

    [autoit]

    #RequireAdmin
    Run(@ComSpec) ; ==> @ComSpec kann durch das gewünschte Programm ersetzt werden

    [/autoit]

    Wenn du allerdings nur für ein bestimmtes Programm diese Rechte anfordern möchtest, kannst du auch ShellExecute nehmen und das jeweilige Programm so aufrufen:

    [autoit]

    ShellExecute(@ComSpec, '', '', 'runas') ; ==> @ComSpec kann durch das gewünschte Programm ersetzt werden

    [/autoit]

    Ich sehe in deinem Skript allerdings auch nicht deutlich eine Batch-Datei, sondern eine .exe. (Batch 2 Exe - Converter genutzt ?)

  • Danke für eure Antworten!

    @Cyrox: Ja ich benutzte den Bat2exe Konvertor. Da ich dachte ok vielleicht klappts mit einer EXE Datei besser.

    Leider führte der Ansatz auch nicht zum Ziel.

    Wenn ich die Funktion #RequireAdmin am mit angebe, funktioniert das Skript zwar tadellos, blos ist das nicht der Weg den ich gehen kann.
    Bei dem Skript handelt es sich um ein Logon Skript. Natürlich sollte das Skript im Hintergrund laufen, ohne das der Anwender etwas bestätigen muss. Abgesehen davon, muss das Skript auch laufen, wenn der Anwender kein Admin ist, und auch nicht die Möglichkeit hat das Skript über ein Admin Konto auszuführen.
    Wie gesagt, es handelt sich um ein Logon Skript.

    @Cyrox: ich werde es mit der Funktion ShellExecute so wie du es beschrieben hast probieren und bin gespannt, ob es klappt.


    Gruß

    0cool

    Gut das fragen nichts kostet :)

  • @veronesi: Danke für die Idee. Mein erster Versuch das Skript über RunAs zu starten war ohne das Profil zu laden. Leider hat das auch nicht geklappt.

    Danke an alle für eure Hilfe!
    Doch alle Versuche führten immer wieder dazu, dass der Benutzername und das Passwort des Admin abgefragt werden.
    Ich würde gerne die Admin Anmelde Daten im Skript als Parameter des Programm Aufrufs hinterlegen, damit das Skript als Logon Skript benutzt werden kann. Egal ob der der sich anmeldet Admin ist oder nicht.

    @Cyrox: Kann ich bei deinem Vorschlag als Parameter Benutzername und Passwort hinterlegen? Wenn ja, kann du bitte die Syntax Posten? Ich habs bis jetzt nicht hinbekommen.

    [Edit]
    Es kann sein das ich gerade im Forum die Lösung gefunden habe. Ich muss es aber noch Testen.
    Link: [ gelöst ] ShellExecuteAs???

    Sobald ich diesen Weg getestet habe, gebe ich bescheid.
    [/Edit]

    Gruß

    0cool

    Gut das fragen nichts kostet :)

    Einmal editiert, zuletzt von 0cool (26. November 2012 um 12:33)

  • Hi,

    ShellExecute fordert nur die UAC(-Meldung) an bzw. "erzeugt" diese für das zu startende Programm, ein richtiges RunAs <Benutzername> gibt es da nicht standardmäßig leider, vielleicht aber als UDF.
    Ich habe ganz ehrlich noch nicht so richtig verstanden, was du eigentlich machen möchtest.
    Du willst, ohne dass die UAC Meldung kommt, Adminrechte haben oder?

  • @Cyrox: Genau ich will für ein Programm das ich über das Skript ausführe Admin rechte.

    Der Benutzernamen und das Passwort werde im Skript hinterlegt. Und die Bat Datei wird im Administrativen Kontext ausgeführt.

    Ich hab eine Zeile Code gefunde die leider nur hab Funktioniert.

    Code:

    [autoit]

    RunAs($admin, @ComputerName, $pw, 0, @AutoItExe & ' /AutoIt3ExecuteLine "ShellExecute(''' & $advFirewall & ''')"', @ScriptDir)

    [/autoit]

    Aber die Bat Datei lässt sich ausführen. Nur wie ich den Parameter den die Bat Datei benötigt mitgeben kann weiss ich nicht.

    Wie kann ich den Parameter an die Bat Datei mit übergeben?

    Gruß

    0cool

    Gut das fragen nichts kostet :)