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?
RunAs mit verschiedenen Benutzerkennungen
-
- [ offen ]
-
Scritch -
9. November 2010 um 11:18 -
Geschlossen -
Erledigt
-
-
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 -
Stimmt, gute Idee. Danke dir
-
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)
[/autoit] [autoit][/autoit] [autoit]
Global $Passwort = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")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. -
Funktioniert soweit, danke.
Habe da aber noch eine Kleinigkeit:Spoiler anzeigen
[autoit]Global $benutzername = InputBox("Benutzername", "Geben Sie bitte Ihren Benutzernamen ein.", @UserName)
[/autoit] [autoit][/autoit] [autoit]
Global $passwort = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")Global $pfad = "c:\WINNT\explorer.exe"
[/autoit] [autoit][/autoit] [autoit]
Global $abenutzername[4] = ["Peter", "Joseph", "Ferdinand", "Ingeborg"]For $r = 0 To Ubound($abenutzername) - 1
[/autoit] [autoit][/autoit] [autoit]
If Not $abenutzername[$r] = $benutzername Then
MsgBox(0, "", "Sie sind zur Installation nich berechtigt!")
Exit
EndIf
NextRunAs($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]
[/autoit][autoit][/autoit][autoit]
Global $benutzername = InputBox("Benutzername", "Geben Sie bitte Ihren Benutzernamen ein.", @UserName)
Global $passwort = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")Global $pfad = "c:\WINNT\explorer.exe"
[/autoit][autoit][/autoit][autoit]
Global $abenutzername[4] = ["Peter", "Joseph", "Ferdinand", "Ingeborg"]For $r = 0 To Ubound($abenutzername) - 1
[/autoit]
If $abenutzername[$r] = $benutzername Then
RunAs($benutzername, "Domäne", $passwort, 0, $pfad)
EndIf
Next
MsgBox(0, "", "Sie sind zur Installation nich berechtigt!")
Exit -
- Offizieller Beitrag
Werte mal die Rückgabe von RunAs aus. Wenn nicht erfolgreich wird 0 zurückgegeben und @error gesetzt.
-
Wohl eher so:
[autoit]
[/autoit] [autoit][/autoit] [autoit]
Global $benutzername = InputBox("Benutzername", "Geben Sie bitte Ihren Benutzernamen ein.", @UserName)
Global $passwort = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")Global $pfad = "c:\WINNT\explorer.exe"
[/autoit] [autoit][/autoit] [autoit]
Global $abenutzername[4] = ["Peter", "Joseph", "Ferdinand", "Ingeborg"]For $r = 0 To Ubound($abenutzername) - 1
[/autoit]
If $abenutzername[$r] = $benutzername Then
RunAs($benutzername, "Domäne", $passwort, 0, $pfad)
EndIf
Next
MsgBox(0, "", "Sie sind zur Installation nich berechtigt!")
ExitBei Dir fehlt nach dem RunAs ein Exit, ansonste perfekt!
-
Achso: Kann ich anstatt des Programmes auch eine Funktion ausführen lassen?
Den Pfad durch den Funktionnamen ersetzen geht leider nicht -
Mein Vorschlag:
Spoiler anzeigen
[autoit]Global $fAuthorized
[/autoit] [autoit][/autoit] [autoit]Global $sUser = InputBox("Benutzername", "Geben Sie bitte Ihren Benutzernamen ein.", @UserName)
[/autoit] [autoit][/autoit] [autoit]
Global $sPass = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")Global $sPath = "c:\WINNT\explorer.exe"
[/autoit] [autoit][/autoit] [autoit]
Global $aUserAuthorized[4] = ["Peter", "Joseph", "Ferdinand", "Ingeborg"]For $i = 0 To Ubound($aUserAuthorized) - 1
[/autoit] [autoit][/autoit] [autoit]
If $sUser = $aUserAuthorized[$i] Then $fAuthorized = 1
NextIf $fAuthorized Then
[/autoit]
RunAs($sUser, "Domäne", $sPass, 0, $sPath)
Else
MsgBox(0, "", "Sie sind zur Installation nicht berechtigt!")
EndIfKlar 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>
[/autoit] [autoit][/autoit] [autoit]
#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.", "", "*")Global $pfad = "c:\WINNT\explorer.exe"
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $abenutzername[4] = ["User1", "User2", "User3", "User4"]For $r = 0 To Ubound($abenutzername) - 1
[/autoit] [autoit][/autoit] [autoit]
If $abenutzername[$r] = $benutzername Then
RunAs($benutzername, "CN7SL956", $passwort, 0, $ausfuehren)
Exit
EndIf
Next
MsgBox(0, "", "Sie sind zur Installation nich berechtigt!")
ExitFunc ausfuehren()
[/autoit]
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
Aktuell läuft das Skript zwar, aber nach der PW-Eingabe beendet es sich -
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)
[/autoit] [autoit][/autoit] [autoit]
Global $sPass = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")Global $sPath = "c:\WINNT\explorer.exe"
[/autoit] [autoit][/autoit] [autoit]
Global $aUserAuthorized[4] = ["Peter", "Joseph", "Ferdinand", "Ingeborg"]For $i = 0 To Ubound($aUserAuthorized) - 1
[/autoit] [autoit][/autoit] [autoit]
If $sUser = $aUserAuthorized[$i] Then $fAuthorized = 1
NextIf $fAuthorized Then
[/autoit] [autoit][/autoit] [autoit]
RunAs($sUser, "Domäne", $sPass, 0, $sPath)
_IrgendeineFunktion()
Else
MsgBox(0, "", "Sie sind zur Installation nicht berechtigt!")
EndIfFunc _IrgendeineFunktion()
[/autoit]
MsgBox(0, "Test", "Test")
EndFunc -
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 warDa 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
[autoit]
Dein Skript hört deshalb auf weil du ein exit eingebaut hastMsgBox(0, "", "Sie sind zur Installation nich berechtigt!")
[/autoit]
Exit
[autoit]
und somit die while schleife nie erreicht wirdWhile 1
[/autoit]
$nmsg = GUIGetMsg()
Select
Case $nmsg = $GUI_EVENT_CLOSE
ExitLoop
EndSelect
WEndDa du
[autoit]Opt("GUIOnEventMode", 1)
[/autoit]verwendest, brauchst du nicht GUIGetMsg() abzufragen!
[autoit]While 1
[/autoit]
Sleep(100)
WEndNe, 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... -
aber da
habe ich dann ja wieder keine Authentifizierung...
[autoit]
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"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.