1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Scritch

Beiträge von Scritch

  • InputBox schreibt Zeilenumbruch

    • Scritch
    • 16. November 2010 um 11:04

    Hallo,

    ich habe für ein RunAs-Script eine Benutzer und Passwortabfrage. Das wird mit Inputboxen realisiert. Der Benutzer wird in eine Datei geschrieben und später mit einem anderen Script weiterverwendet. Wenn ich jetzt Benutzername eingeben, Enter, Passwort, Enter dann schreibt er die beiden Enter mit in die Datei, was aber nicht soll. Ist das ein Bug? Klicke ich mit der Maus auf ok, ist alles i. O.

    Spoiler anzeigen
    [autoit]

    Global $benutzername = InputBox("Benutzername", "Geben Sie bitte Ihren Benutzernamen ein.")
    Global $passwort = InputBox("Passwort", "Geben Sie bitte Ihr Passwort ein.", "", "*")
    _FileCreate($tmp)
    _FileWriteToLine($tmp, 1, $benutzername, 1)

    [/autoit]
  • If oder If Not - das ist hier die Frage

    • Scritch
    • 16. November 2010 um 08:43
    Zitat von Fr34k

    Ich denke, du verwendest

    Code
    _ArrayUnique


    Dieses setzt an die erste Position des Arrays, die Anzahl an zurückgegebenen Strings...

    Um nochmal ein vorhandenes Problem aufzugreifen ohne einen neuen Thread zu eröffnen: Wie bekomme ich die Zahl an erster Stelle nun hinaus?

    Spoiler anzeigen
    [autoit]

    Local $tmp = @ScriptDir & "\tmp.txt"
    Local $atmp
    Global $pfad = "G:\Installationen\Installationen.exe"
    Global $abenutzername[4] = ["User1", "User2", "User3", "User4"]
    _FileReadToArray($tmp, $atmp)
    Local $bAllowed

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

    For $r = 1 To Ubound($abenutzername) - 1
    If $atmp = $abenutzername[$r] Then
    $bAllowed = True
    ExitLoop
    EndIf
    Next

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

    if not $bAllowed then
    MsgBox(0, "", "Bitte Programm mit RunAs starten!")
    exit
    EndIf

    [/autoit]


    In der tmp-Datei steht ein Benutzer der von meinem runas-Script darei geschrieben wurde. Nur wenn der Benutzer darin steht, soll das andere Script geöffnet werden können. Wenn das Script also ohne das RunAs-Script versucht wird aufzurufen, soll es eine Fehlermeldung geben. Prinzipiell kann ich die Schleife doch auch in Zeile 1 starten lassen mit For $r = 1, oder nicht? Funktioniert aber nicht. der Fehler wird immer ausgegeben, auch wenn einer der 4 Benutzer in der tmp.txt steht...

  • If oder If Not - das ist hier die Frage

    • Scritch
    • 15. November 2010 um 14:50

    O, danke. Hätte ich auch selber drauf kommen können. :wacko:

  • If oder If Not - das ist hier die Frage

    • Scritch
    • 15. November 2010 um 14:27

    Was'n ms in dem Zusammenhang?
    Diese Lösung funktioniert, wie es soll:

    Spoiler anzeigen
    [autoit]

    For $i = 1 To Ubound($atmp) - 1 ;für den Fall, das mehr als ein Benutzer in der Datei steht
    _ArraySearch($abenutzername, $atmp[$i]) If @error Then
    MsgBox(0, "", "Sie sind zur Installation nich berechtigt!")
    Exit
    EndIf
    Next

    [/autoit]


    Vielen Dank für Eure Hilfe Jungs :thumbup:

    PS: Noch eine andere Sache nebenbei: Manchmal beim Quelltext einfügen behält er nicht die Formatierung bei, sondern schreibt alle Zeilen hintereinander.
    Was mag das sein? Ist wie gesagt nicht immer...

  • If oder If Not - das ist hier die Frage

    • Scritch
    • 15. November 2010 um 13:19

    Was ist mit dem 4. Post von i2c? Das hat mich gerade etwas aus der Bahn geworfen...

    Ich probiere AutoBerts Version gleich auch nochmal aus. Habe hier sonst auch noch was:

    Spoiler anzeigen
    [autoit]

    For $e = 0 To Ubound($atmp) - 1
    For $r = 0 To Ubound($abenutzername) - 1
    _ArraySearch($abenutzername, $atmp, 1)
    If @error Then
    MsgBox(0, "", "Sie sind zur Installation nich berechtigt!")
    Exit
    EndIf
    Next
    Next

    [/autoit]


    Oder brauche ich Array mit nur einem Eintrag nicht in eine Schleife packen?

  • If oder If Not - das ist hier die Frage

    • Scritch
    • 15. November 2010 um 13:07
    Zitat von m-obi

    Wo denn? Sehe ich nicht.


    Wo?
    Du:

    Spoiler anzeigen
    [autoit]

    For $i = 0 To Ubound($aUserAuthorized) - 1
    If $sUser = $aUserAuthorized[$i] Then $fAuthorized = 1
    Next
    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][/autoit]

    Ich:

    Spoiler anzeigen
    [autoit]

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

    [/autoit]


    Abgesehen von dem Funktionsaufruf bei dir ist es doch eig. das selbe.
    Mhh... ne, eine Nachricht sollte nicht kommen, wenn alles ok ist, Fr34k ;)

  • If oder If Not - das ist hier die Frage

    • Scritch
    • 15. November 2010 um 12:52

    @Fr34k: Fehlermeldung bekomme ich keine. Das Script öffnet sich, auch wenn in der tmp.txt ein anderer Benutzername steht als es darf.
    @Mobi: Deine Möglichkeit habe ich in meinem RunAs-Script z. T. mit eingebaut:

    Spoiler anzeigen
    [autoit]

    $commandName = "copy Q:\Installationen.exe d:\"

    [/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 $domain = "Domäne"
    Global $pfad = "D:\Installationen.exe"
    Global $abenutzername[4] = ["Benutzer1", "Benutzer2", "Benutzer3", "Benutzer4"]

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

    For $r = 0 To Ubound($abenutzername) - 1
    If $abenutzername[$r] <> $benutzername Then
    MsgBox(0, "", "Sie sind zur Installation nich berechtigt!")
    Exit
    EndIf
    Next
    Run(@ComSpec & " /c " & $commandName, "")
    Run(@ComSpec & " /c Exit", "")

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

    While
    If FileExists($pfad) Then ExitLoop
    WEnd

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

    RunAs($benutzername, $domain, $passwort, 0, $Pfad)
    Exit

    [/autoit]

    i2c: Haste Recht. Mache ich dann mit Arraysearch

  • If oder If Not - das ist hier die Frage

    • Scritch
    • 15. November 2010 um 12:29

    Simple Geschichte eig.
    Ich möchte halt etwas in Abhängigkeit machen, ob eine Bedinung erfüllt ist, oder nicht. Das wollte ich mit If Not machen.
    Das funktioniert aber nicht. Dann mal gegooglet, gesehen dass man es auch mit <> machen kann (muss?).
    Funktioniert aber auch nicht wie es soll :pinch:

    Das habe ich:

    Spoiler anzeigen
    [autoit]

    Local $tmp = @ScriptDir & "\tmp.txt"
    Local $atmp
    _FileReadToArray($tmp, $atmp)
    Global $pfad = "G:\Installationen\Installationen.exe"
    Global $abenutzername[4] = ["Benutzer1", "Benutzer2", "Benutzer3", "Benutzer4"]

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

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

    [/autoit]

    Sinn davon: Von einem RunAs-Script wo Benutzer und PW abgefragt und in eine
    Variable geschrieben werden, wird der Benutzer bzw. die Variable wo der Benutzer drin
    ist in eine temporäre Textdate (tmp.txt) geschrieben. Dieser Benutzer wird nochmal beim start des
    aufgerufenen Script abgefragt und mit den 4 Benutzern im Array verglichen. Stimmt der Benutzer
    in der tmp-Datei mit keinem der 4 ein beendet sich das Script mit einer Fehlermeldung.
    Sinn hiervon ist wiederum, dass das aufzurufende Script nicht ohne das RunAs-Script gestartet werden
    soll.

    Edit: Starten tut Ubound bei 1 und nicht bei null weil in der ersten Zeile, warum auch immer, die
    Anzahl der Zeilen, also 1, steht. Die tmp-Daei wird nach dem erfolgreichen Programmaufruf
    natürlich gelöscht.

  • RunAs und Netzlaufwerk + Variablenübergabe zwischen 2 Scripten

    • Scritch
    • 12. November 2010 um 16:13

    So, werde es jetzt anders lösen. Jetzt nur noch die Frage: Wie kann ich Variablen von einem Script in das andere übergeben?

  • RunAs und Netzlaufwerk + Variablenübergabe zwischen 2 Scripten

    • Scritch
    • 12. November 2010 um 14:40

    Ja, das Wort Domäne habe ich schon ersetzt, keine Bange :thumbup:
    Nein, kein Win 7. Win XP ;)

  • RunAs und Netzlaufwerk + Variablenübergabe zwischen 2 Scripten

    • Scritch
    • 12. November 2010 um 11:53

    Ich kann es aufrufen, aber nicht mit dem RunAs-Befehl.
    ShellExecute funktioniert einwandfrei.

    Das mit der Freigabe ist so ein Problem. Unsere lokalen Laufwerke haben eine Freigabe,
    die Netzlaufwerke aber nicht und ich habe auch keine Rechte dazu, diese freizugeben.
    (Rechtsklick, Eigenschaften, Freigabe)

  • RunAs und Netzlaufwerk + Variablenübergabe zwischen 2 Scripten

    • Scritch
    • 12. November 2010 um 11:43

    Was meinst mit verbunden? Ich habe eo über den Explorer Zugriff, wenn du das meinst.
    Mit dem UNC-Pfad meinst du das, richtig? \\Servername\q:\Scripte\script.exe
    Das funktioniert auch nicht.
    Habe alle Zahlen von 0-3 durch. Funktioniert ebenfals nicht.
    Was ich aber gerade versucht habe: Die Datei mit einem ShellExecute aufzurufen
    funktioniert. Auch wenn sie sich in 2 verschiedenen Netzlaufwerken befinden!

  • RunAs und Netzlaufwerk + Variablenübergabe zwischen 2 Scripten

    • Scritch
    • 12. November 2010 um 10:47

    Ja, natürlich:

    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 = "Q:\Netzlaufwerk1\auszuführende Script.exe"
    Global $abenutzername[4] = ["User1", "User2", "User3", "User4"]

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

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

    [/autoit]

    Das andere Script sieht dann z. B. z. T. so aus:

    [autoit]

    RunAs($benutzername, "Domäne", $passwort, 0, "c:\WINNT\explorer.exe")

    [/autoit]

    Natürlich stark verkürzt ;)

  • RunAs und Netzlaufwerk + Variablenübergabe zwischen 2 Scripten

    • Scritch
    • 12. November 2010 um 10:11

    Moin,
    ich habe hier mehrere Netzlaufwerke. In einem liegt ein Script das ausgeführt werden soll in Form einer .exe. Dieses soll aber durch ein anderes RunAs-Script ausgeführt werden, welches sich auf einem anderen Netzlaufwerk (beide natürlich im gleichen Netzwerk) befindet. Das ist das erste Problem was ich nicht gebacken bekomme. Habs auch schon mit dem 8.3-Namen versucht - ebenfals kein Erfolg! Liegt das auszuführende Script z. B. auf dem USB-Stick, und nur das RunAs-Script im Netzwerk, funktioniert der Aufruf. Liegt das RunAs-Script lokal auf dem Rechner, und das andere Script im Netzwerk, funktioniert es wieder nicht.

    Die andere Sache: Ich habe bei dem RunAs eine Anmeldung mit eingebaut. Passwort und Benutzername sollen vom RunAs-Script an das andere in einer Variablen übergeben werden, um diese noch für andere RunAs'es zu benutzen.

    PS: Nein, ich kann nicht aus beiden Scripten eines machen ;)

  • Kompilierte .exe funktioniert nicht

    • Scritch
    • 11. November 2010 um 12:08

    Tatsächlich, dass ich das übersehen konnte :pinch:
    Danke dir!

  • Kompilierte .exe funktioniert nicht

    • Scritch
    • 11. November 2010 um 11:35

    Hallöchen,

    ich wollte in mein kompiliertes Script eine .exe mit einbinden die sich auf Knopfdruck in ein vorher erstelltes Verzeichnis entpackt und die gepackte Datei dann in ein anderes Verzeichnis kopiert. Habe das ganze bisher auf einem USB-Stick probiert und da auch das Script kompiliert. Wenn ich die kompilierte .exe ausführe, den Button betätige, funktioniert es auch einwandfrei. Kopiere ich die .exe in ein anderes Verzeichnis, bekomme ich ein Fehlermeldung. Das Script erstellt zwar wie gewünscht den Ordner, die .exe die entpackt werden soll (selbstentpackendes Ziparchiv) wird auch dareinkopiert, allerdings nicht entpackt...
    Hier das Script, bzw. nur die Funktion:

    Spoiler anzeigen
    [autoit]

    Func Button2()
    $read = GUICtrlRead($Button2)
    Local $Zielpfad = "C:\Dokumente und Einstellungen\All Users\Startmenü\Programme\Autostart"
    Local $scriptpfad = @ScriptDir & "\script\"
    DirCreate(@ScriptDir & "\script\")
    FileInstall("nit.exe", @ScriptDir & "\script\")
    ShellExecuteWait(@ScriptDir & "\nit.exe", '-d"' & $scriptpfad & '" -s2')
    FileCopy($scriptpfad, $Zielpfad)
    DirRemove($scriptpfad, 1)
    EndFunc

    [/autoit]
  • RunAs mit verschiedenen Benutzerkennungen

    • Scritch
    • 9. November 2010 um 15:40

    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...

  • RunAs mit verschiedenen Benutzerkennungen

    • Scritch
    • 9. November 2010 um 14:55

    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?

  • RunAs mit verschiedenen Benutzerkennungen

    • Scritch
    • 9. November 2010 um 14:39

    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.

  • RunAs mit verschiedenen Benutzerkennungen

    • Scritch
    • 9. November 2010 um 14:28

    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:

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™