Fehlermeldung ausgeben

  • Hallo zusammen, ich habe mir ein kleines Script geschrieben um Benutzern in unserem AD kurzfristig lokale Admin-Rechte einzuräumen, für das aktivieren bzw. deaktivieren der Hibernate Funktion sowie der Installation lokaler Drucker. Es läuft auch so wie ich es geplant hatte, allerdings fehlt mir noch eine Fehlermeldung, die ausgegeben wird sobald eine Programfunktion auf einem Client ausgeführt wird für den keine Admin-Daten im Quellcode hinterlegt sind. Als Beispiel ein Benutzer führt das Program auf einem externen Client aus. Nun sind in meinem Quelltext nur die Admin-Daten unserer Clients hinterlegt und das Program soll beim ausführen einer der Programfunktionen melden --> Fehler: Es konnten keine lokalen Admin-Rechte vergeben werden !

    Ich hoffe ihr könnt mir helfen.

    Quelltext:

    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)
    _Main()
    Func _Main()

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

    Local $Button1ID, $Button2ID, $Button3ID, $Button4ID, $ExitID, $InfoID, $msg, $runas
    Local $sUserName = "Administrator"
    Local $sPassword = "Passwort"
    Local $Startdatei1 = "c:\windows\system32\powercfg /h on"
    Local $Startdatei2 = "c:\windows\system32\powercfg /h off"
    Local $Startdatei3 = "rundll32 printui.dll,PrintUIEntry /il"

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

    GUICreate("USS", 170, 160)
    $Button1ID = GUICtrlCreateButton("Hibernate ON", 10, 10, 150, 20)
    $Button2ID = GUICtrlCreateButton("Hibernate OFF", 10, 30, 150, 20)
    $Button3ID = GUICtrlCreateButton("Lokale Druckerinstallation", 10, 50, 150, 20)
    $ExitID = GUICtrlCreateButton("Beenden", 10, 100, 150, 20)
    $InfoID = GUICtrlCreateButton("Info", 10, 130, 150, 20)
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    Select

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

    Case $msg = $Button1ID
    RunAs($sUserName, @ComputerName, $sPassword, 0, $Startdatei1, @ScriptDir)
    MsgBox (32, "Hinweis", "Hibernate ON")
    Case $msg = $Button2ID
    RunAs($sUserName, @ComputerName, $sPassword, 0, $Startdatei2, @ScriptDir)
    MsgBox (32, "Hinweis", "Hibernate OFF")
    Case $msg = $Button3ID
    RunAs($sUserName, @ComputerName, $sPassword, 0, $Startdatei3, @ScriptDir)
    Case $msg = $InfoID
    MsgBox(0, "Info", "USS (User-Self-Service)"&@CRLF&"Version: 1.0")
    Case $msg = $ExitID
    Case $msg = $GUI_EVENT_CLOSE

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

    EndSelect
    Until $msg = $GUI_EVENT_CLOSE Or $msg = $ExitID
    EndFunc

    [/autoit]


    MFG Apocsis

    Einmal editiert, zuletzt von Apocsis (4. Februar 2009 um 17:36)

  • ähh wo sind die daten hinterlegt und wie holst du sie mit autoit? bzw. weisst dem benutzer die adminrechte zu???
    Stehe ich grad aufm schlauch oder ist dass das komplette script?

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • ähh und woher hat der user jetzt die adminrechte?

    Also testen ob ein User Adminrechte hat oder nicht tut man einfach so:

    [autoit]

    If IsAdmin() Then
    MsgBox(0, "", "User hat Adminrechte")
    Else
    MsgBox(0, "", "User hat keine Adminrechte")
    EndIf

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Also ich stehe auch aufm Schlauch! Du musst doch irgendwie das Passwort abfragen, sonst kanst du ja nicht sagen ob das Ein andministrator ist oder nicht! Oder meinst du die Rechte die Der PC-User hat?

    EDIT: Ui, das ging aber schnell, ich schreibe eine Antwort und aufeinmal sind 2 Post mehr da :D

    mfg. Jam00


  • Also ich stehe auch aufm Schlauch! Du musst doch irgendwie das Passwort abfragen, sonst kanst du ja nicht sagen ob das Ein andministrator ist oder nicht! Oder meinst du die Rechte die Der PC-User hat?

    Japp, das Passwort wird nirgends abgefragt sondern steht im Quelltext mit drin (Zeile 8 und 9 --> wird dann übergeben z.B. an Zeile 28 ).

  • hmpf mit der runas funktion... tja da bleibt dir fast nur übrig zu schauen ob runas einen error zurückgibt, das muss aber nicht unbedingt heissen das der user keine adminrechte hat... also probiers mal so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)
    _Main()
    Func _Main()

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

    Local $Button1ID, $Button2ID, $Button3ID, $Button4ID, $ExitID, $InfoID, $msg, $runas
    Local $sUserName = "Administrator"
    Local $sPassword = "Passwort"
    Local $Startdatei1 = "c:\windows\system32\powercfg /h on"
    Local $Startdatei2 = "c:\windows\system32\powercfg /h off"
    Local $Startdatei3 = "rundll32 printui.dll,PrintUIEntry /il"

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

    GUICreate("USS", 170, 160)
    $Button1ID = GUICtrlCreateButton("Hibernate ON", 10, 10, 150, 20)
    $Button2ID = GUICtrlCreateButton("Hibernate OFF", 10, 30, 150, 20)
    $Button3ID = GUICtrlCreateButton("Lokale Druckerinstallation", 10, 50, 150, 20)
    $ExitID = GUICtrlCreateButton("Beenden", 10, 100, 150, 20)
    $InfoID = GUICtrlCreateButton("Info", 10, 130, 150, 20)
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    Select

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

    Case $msg = $Button1ID
    RunAs($sUserName, @ComputerName, $sPassword, 0, $Startdatei1, @ScriptDir)
    If @error Then MsgBox(0, "Fehler", "Es gab einen Fehler!") ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    MsgBox (32, "Hinweis", "Hibernate ON")
    Case $msg = $Button2ID
    RunAs($sUserName, @ComputerName, $sPassword, 0, $Startdatei2, @ScriptDir)
    MsgBox (32, "Hinweis", "Hibernate OFF")
    Case $msg = $Button3ID
    RunAs($sUserName, @ComputerName, $sPassword, 0, $Startdatei3, @ScriptDir)
    Case $msg = $InfoID
    MsgBox(0, "Info", "USS (User-Self-Service)"&@CRLF&"Version: 1.0")
    Case $msg = $ExitID
    Case $msg = $GUI_EVENT_CLOSE

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

    EndSelect
    Until $msg = $GUI_EVENT_CLOSE Or $msg = $ExitID
    EndFunc

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Mehr oder weniger... auf den Clients die wir einsetzten sind logischerweise die lokalen Admin-Accounts eingerichtet. Im Quelltext stehen die Anmeldedaten für diesen Account. Nimmt nun ein User die aus dem Script compilierte .exe mit nach hause (gehen wir mal davon aus das er zuhause auch nur Benutzerrechte hat) und startet dort das Program, soll es wenn er z.B. auf den Button "Hibernate ON" klickt eine Meldung geben --> Fehler: Es konnten keine lokalen Admin-Rechte vergeben werden !

  • hmpf mit der runas funktion... tja da bleibt dir fast nur übrig zu schauen ob runas einen error zurückgibt, das muss aber nicht unbedingt heissen das der user keine adminrechte hat... also probiers mal so:

    Hmm mit "if @error Then...." habe ich es schon probiert --> klappt nicht. :(

  • das ist genau das was ich oben geschrieben hatte...

    Du musst abfragen ob RunAs einen error zurückgibt, wenn nicht hat alles geklappt wenn ein error da ist gibt es offensichtlich ein problem, ob dieser allerdings durch fehlende rechte herbeigeführt wurde kann man wohl nicht sagen :/

    EDIT: Wie es wird kein error zurückgegeben???

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Du kannst es so probieren:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)
    _Main()
    Func _Main()

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

    Local $Button1ID, $Button2ID, $Button3ID, $Button4ID, $ExitID, $InfoID, $msg, $runas
    Local $sUserName = "Administrator"
    Local $sPassword = "Passwort"
    Local $Startdatei1 = "c:\windows\system32\powercfg /h on"
    Local $Startdatei2 = "c:\windows\system32\powercfg /h off"
    Local $Startdatei3 = "rundll32 printui.dll,PrintUIEntry /il"
    Local $Run
    GUICreate("USS", 170, 160)
    $Button1ID = GUICtrlCreateButton("Hibernate ON", 10, 10, 150, 20)
    $Button2ID = GUICtrlCreateButton("Hibernate OFF", 10, 30, 150, 20)
    $Button3ID = GUICtrlCreateButton("Lokale Druckerinstallation", 10, 50, 150, 20)
    $ExitID = GUICtrlCreateButton("Beenden", 10, 100, 150, 20)
    $InfoID = GUICtrlCreateButton("Info", 10, 130, 150, 20)
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    Select

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

    Case $msg = $Button1ID
    $Run = RunAs($sUserName, @ComputerName, $sPassword, 0, $Startdatei1, @ScriptDir)
    If $Run = 0 Then
    MsgBox (16,"Error","Es ist ein Fehler aufgetreten!")
    Else
    MsgBox (32, "Hinweis", "Hibernate ON")
    EndIf
    Case $msg = $Button2ID
    RunAs($sUserName, @ComputerName, $sPassword, 0, $Startdatei2, @ScriptDir)
    If $Run = 0 Then
    MsgBox (16,"Error","Es ist ein Fehler aufgetreten!")
    Else
    MsgBox (32, "Hinweis", "Hibernate OFF")
    EndIf
    Case $msg = $Button3ID
    RunAs($sUserName, @ComputerName, $sPassword, 0, $Startdatei3, @ScriptDir)
    If $Run = 0 Then
    MsgBox (16,"Error","Es ist ein Fehler aufgetreten!")
    EndIf
    Case $msg = $InfoID
    MsgBox(0, "Info", "USS (User-Self-Service)"&@CRLF&"Version: 1.0")
    Case $msg = $ExitID
    Case $msg = $GUI_EVENT_CLOSE

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

    EndSelect
    Until $msg = $GUI_EVENT_CLOSE Or $msg = $ExitID
    EndFunc

    [/autoit]

    EDIT:
    FireFlyer
    Alos in der Hilfe steht nicht das RunAs @error ausgibt, nur das er 0 ausgibt wenn was nicht funktioniert hat!

    mfg. Jam00

  • Hat geklappt...sogar beide Varianten !!! :P

    [autoit]

    Case $msg = $Button1ID
    RunAs($sUserName, @ComputerName, $sPassword, 0, $Startdatei1, @ScriptDir) ; <------ DANKE FIREFLYER !!!!!!
    If @error Then
    MsgBox(0, "Fehler", "Es gab einen Fehler!")
    Else
    MsgBox (32, "Hinweis", "Hibernate ON")
    EndIf
    Case $msg = $Button2ID
    $Run = RunAs($sUserName, @ComputerName, $sPassword, 0, $Startdatei2, @ScriptDir) ; <------- DANKE JAM00 !!!!!!!
    If $Run = 0 Then
    MsgBox (16,"Error","Es ist ein Fehler aufgetreten!")
    Else
    MsgBox (32, "Hinweis", "Hibernate OFF")
    EndIf

    [/autoit]


    Vielen Dank an EUCH für die schnelle Hilfe !!!