RunAs mit verschiedenen Benutzerkennungen

  • Moin,
    mit RunAs kann man ja bestimmte Dateien und so mit einer bestimmten Kennung ausführen. Allerdings muss man die ja im Skript angeben. Ist es auch möglich es so einzurichten, dass das ganze nicht mit einer bestimmten Kennung ausgeführt wird, sondern mit einer die man beim Start des Skriptes eingibt?

    4 Mal editiert, zuletzt von Scritch (9. November 2010 um 13:09)

  • Natürlich ist das möglich.
    Frag doch einfach die kennung mit einer Inputbox ab die verwendet werden soll und speicher sie in eine Variable
    Und bei RunAs verwendest du dann die variable

  • Schau dir in der Hilfe mal den Befehl InputBox an. ;)

    Probier erst selbst mal, bevor du meine Lösung nimmst.

    Lösung
    [autoit]

    Global $Benutzername = InputBox("Benutzername", "Geben Sie bitte Ihren Benutzernamen ein.", @UserName)
    Global $Passwort = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")

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

    Global $Pfad = "C:\Program Files\Internet Explorer\iexplore.exe"

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

    RunAs($Benutzername, @ComputerName, $Passwort, 0, $Pfad)

    [/autoit]

    MfG,
    H2112.

    Edit:
    Da war wohl einer schneller. :rofl:

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • Funktioniert soweit, danke.
    Habe da aber noch eine Kleinigkeit:

    Spoiler anzeigen
    [autoit]

    Global $benutzername = InputBox("Benutzername", "Geben Sie bitte Ihren Benutzernamen ein.", @UserName)
    Global $passwort = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")

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

    Global $pfad = "c:\WINNT\explorer.exe"
    Global $abenutzername[4] = ["Peter", "Joseph", "Ferdinand", "Ingeborg"]

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

    For $r = 0 To Ubound($abenutzername) - 1
    If Not $abenutzername[$r] = $benutzername Then
    MsgBox(0, "", "Sie sind zur Installation nich berechtigt!")
    Exit
    EndIf
    Next

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

    RunAs($benutzername, "Domäne", $passwort, 0, $pfad)

    [/autoit]


    Fals sich ein benutzer anmeldet der sich nicht anmelden darf, oder es zumindest versucht,
    Soll eine Meldung kommen. Dachte es würde so funktionieren, dem ist aber nicht so...

  • Wohl eher so:

    [autoit]


    Global $benutzername = InputBox("Benutzername", "Geben Sie bitte Ihren Benutzernamen ein.", @UserName)
    Global $passwort = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")

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

    Global $pfad = "c:\WINNT\explorer.exe"
    Global $abenutzername[4] = ["Peter", "Joseph", "Ferdinand", "Ingeborg"]

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

    For $r = 0 To Ubound($abenutzername) - 1
    If $abenutzername[$r] = $benutzername Then
    RunAs($benutzername, "Domäne", $passwort, 0, $pfad)
    EndIf
    Next
    MsgBox(0, "", "Sie sind zur Installation nich berechtigt!")
    Exit

    [/autoit]
    • Offizieller Beitrag

    Werte mal die Rückgabe von RunAs aus. Wenn nicht erfolgreich wird 0 zurückgegeben und @error gesetzt.

  • Bei Dir fehlt nach dem RunAs ein Exit, ansonste perfekt! :)

  • Mein Vorschlag:

    Spoiler anzeigen
    [autoit]

    Global $fAuthorized

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

    Global $sUser = InputBox("Benutzername", "Geben Sie bitte Ihren Benutzernamen ein.", @UserName)
    Global $sPass = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")

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

    Global $sPath = "c:\WINNT\explorer.exe"
    Global $aUserAuthorized[4] = ["Peter", "Joseph", "Ferdinand", "Ingeborg"]

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

    For $i = 0 To Ubound($aUserAuthorized) - 1
    If $sUser = $aUserAuthorized[$i] Then $fAuthorized = 1
    Next

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

    If $fAuthorized Then
    RunAs($sUser, "Domäne", $sPass, 0, $sPath)
    Else
    MsgBox(0, "", "Sie sind zur Installation nicht berechtigt!")
    EndIf

    [/autoit]

    Klar geht das mit einer Funktion auch, wieso sollte es nicht gehen?

  • Du hast aber anstatt eines fFunktionaufrufes jetzt auch nur $path drin. An der Stelle möchte ich gerne den Funktionaufruf haben, was aber nicht klappt :(

    Edit:
    Das habe ich bisher, so wie es soll funktionierts aber noch nicht...

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <string.au3>
    #include <Array.au3>
    #include-once
    Global $ausfuehren = ausfuehren()
    Global $benutzername = InputBox("Benutzername", "Geben Sie bitte Ihren Benutzernamen ein.", @UserName)
    Global $passwort = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")

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

    Global $pfad = "c:\WINNT\explorer.exe"
    Global $abenutzername[4] = ["User1", "User2", "User3", "User4"]

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

    For $r = 0 To Ubound($abenutzername) - 1
    If $abenutzername[$r] = $benutzername Then
    RunAs($benutzername, "CN7SL956", $passwort, 0, $ausfuehren)
    Exit
    EndIf
    Next
    MsgBox(0, "", "Sie sind zur Installation nich berechtigt!")
    Exit

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

    Func ausfuehren()
    Opt("GUIOnEventMode", 1)
    Global $Form1 = GUICreate("Installation versch. Komponenten", 200, 261, 188, 112)
    ;----------------------------------------------------------------------------------------------------------------
    Global $Button1 = GUICtrlCreateButton("Explorer", 30, 20, 140, 25, $WS_GROUP)
    GUICtrlSetData($Button1, "Explorer")
    GUICtrlSetOnEvent($Button1, "Button")
    ;----------------------------------------------------------------------------------------------------------------
    Global $Label3 = GUICtrlCreateLabel(".cmd kopieren", 30, 50, 140, 17)
    Global $Combo3 = GUICtrlCreateCombo(".cmd auswählen", 30, 65, 140, 25)
    GUICtrlSetData($Combo3, "d_buha.cmd|d_control.cmd|d_edv.cmd|d_edvebl.cmd|d_immo.cmd|d_innenrev.cmd|d_kredit.cmd|d_market.cmd|d_orga.cmd|d_person.cmd|d_sekret.cmd|d_wertpa.cmd", ".cmd auswählen")
    GUICtrlSetOnEvent($Combo3, "Combo3")
    ;----------------------------------------------------------------------------------------------------------------
    Global $Label2 = GUICtrlCreateLabel("Netzw. Drucker inst.", 30, 95, 140, 17)
    Global $Combo2 = GUICtrlCreateCombo("Drucker auswählen", 30, 110, 140, 25)
    GUICtrlSetData($Combo2, "EFW Schlüter|EFW Wurth|EFW MSC|Kopierer Wurth|Keller|Immo|ORGA|VoSek|C532 VoSek|Service", "Drucker auswählen")
    GUICtrlSetOnEvent($Combo2, "Combo2")
    ;----------------------------------------------------------------------------------------------------------------
    Global $Label1 = GUICtrlCreateLabel("Lokalen Drucker inst.", 30, 140, 140, 17)
    Global $Combo1 = GUICtrlCreateCombo("Drucker auswählen", 30, 155, 140, 25)
    GUICtrlSetData($Combo1, "Lexmark E232d|Lexmark E240d|Lexmark E350d|Lexmark C532N", "Drucker auswählen") ;Was ist im Dropdownmenü enthalten?
    GUICtrlSetOnEvent($Combo1, "Combo1") ;Damit die Aktion auch durchgeführt wird
    ;----------------------------------------------------------------------------------------------------------------
    Global $Label4 = GUICtrlCreateLabel("Bildschirmauflösung", 30, 185, 140, 17)
    Global $Combo4 = GUICtrlCreateCombo("Auflösung auswählen", 30, 200, 140, 25) ;Bildschirmauflösung
    GUICtrlSetData($Combo4, "1024*768|1280*1024", "Auflösung auswählen")
    GUICtrlSetOnEvent($Combo4, "Combo4")
    ;----------------------------------------------------------------------------------------------------------------
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    GUISetState()
    EndFunc
    While 1
    $nmsg = GUIGetMsg()
    Select
    Case $nmsg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    WEnd

    [/autoit]


    Aktuell läuft das Skript zwar, aber nach der PW-Eingabe beendet es sich :sleeping:

    Einmal editiert, zuletzt von Scritch (9. November 2010 um 14:37)

  • Hab ich auch nicht reingemacht, mein Post war auf deinen ersten Post gerichtet. Was soll denn die Funktion machen?
    Hier mir Funktionsaufruf:

    Spoiler anzeigen
    [autoit]

    Global $fAuthorized

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

    Global $sUser = InputBox("Benutzername", "Geben Sie bitte Ihren Benutzernamen ein.", @UserName)
    Global $sPass = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")

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

    Global $sPath = "c:\WINNT\explorer.exe"
    Global $aUserAuthorized[4] = ["Peter", "Joseph", "Ferdinand", "Ingeborg"]

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

    For $i = 0 To Ubound($aUserAuthorized) - 1
    If $sUser = $aUserAuthorized[$i] Then $fAuthorized = 1
    Next

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

    If $fAuthorized Then
    RunAs($sUser, "Domäne", $sPass, 0, $sPath)
    _IrgendeineFunktion()
    Else
    MsgBox(0, "", "Sie sind zur Installation nicht berechtigt!")
    EndIf

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

    Func _IrgendeineFunktion()
    MsgBox(0, "Test", "Test")
    EndFunc

    [/autoit]
  • Habe meinen letzten Post mal editiert, da siehste es. In der Funktion ist das GUI drinnen, die ich halt mit Adminrechten starten möchte. Könnte das ganze natürlich auch in eine 2. Datei packen, das wäre aber die unschönere Lösung.

  • Wie soll denn das funktionieren? Du weißt schon was Pfad zu einem Programm bedeutet oder? Warum willst du das mit RunAs machen? Überprüf doch einfach ob der User und das dazu passende Passwort übereinstimmen.

  • Jaja, dass es normalerweise Pfad heissn soll, weiss ich. Deswegen ja meine Frage hier ob ein Funktionaufruf auch funktioniert.
    Ne, es muss schon als RunAs passieren, da das Skript mit Adminrechten ausgeführt werden soll, die standardmäßig nicht jeder hat.
    Also werde ich an einem gesonderten Script nicht vorbeikommen, oder? Oder gibs sowas wie RunAs auch mit einem Funktionsaufruf statt eines Programmes?

  • Funktionen werden nicht mit RunAs ausgeführt sondern man schreibt stattdessen einfach nur den Funktionsnamen hin.

    D.h. du hast schon deine gui, mit folgendem aufruf, anzeigen lassen.

    [autoit]

    Global $ausfuehren = ausfuehren()

    [/autoit]


    was ja eigentlich ok ist, aber von dir wahrscheinlich nicht so gewollt war :P

    Da ausfuehren() kein return enthält, kannst du dir die Variable $ausfuehren auch sparen

    [autoit]

    ausfuehren()

    [/autoit]


    Aktuell läuft das Skript zwar, aber nach der PW-Eingabe beendet es sich :sleeping:


    Dein Skript hört deshalb auf weil du ein exit eingebaut hast

    [autoit]

    MsgBox(0, "", "Sie sind zur Installation nich berechtigt!")
    Exit

    [/autoit]


    und somit die while schleife nie erreicht wird

    [autoit]

    While 1
    $nmsg = GUIGetMsg()
    Select
    Case $nmsg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    WEnd

    [/autoit]

    Da du

    [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit]

    verwendest, brauchst du nicht GUIGetMsg() abzufragen!

    [autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit]

    Ne, es muss schon als RunAs passieren, da das Skript mit Adminrechten ausgeführt werden soll, die standardmäßig nicht jeder hat.
    Also werde ich an einem gesonderten Script nicht vorbeikommen, oder?


    Du musst den RunAs Befehl auf deine Buttons verlagern, wo du dann z.B. den Explorer, usw. aufrufst, dann brauchst du auch kein 2. Skript schreiben.

  • Ok. Danke für die Hinweise, teilweise hatte ich es auch schon selber herausgefunden :)
    Das war ja auch meine erste die einzelnen Buttons und so mit RunAs auszuführen, aber da
    habe ich dann ja wieder keine Authentifizierung...

    2 Mal editiert, zuletzt von Scritch (9. November 2010 um 16:18)

  • aber da
    habe ich dann ja wieder keine Authentifizierung...


    Die Authentifizierung machst du doch am Anfang vom Skript
    Kleiner Tipp - mach mit den Anmelde Daten ein Dummy-RunAs und werte die Rückgabe aus ;)
    z.B. Statt "explorer.exe" schreibst du einfach

    [autoit]

    "cmd.exe /C cls" ; <- Startet die shell und schließt gleich wieder = Dummy-RunAs

    [/autoit]

    Wenn die Anmeldung ok war, kannst du später soviele RunAs mit den Anmelde-Daten ausführen wie du willst.