Diesmal: Tastatureingaben an CMD senden

  • Hey, hier ist mal wieder der Forenschreck mit einer neuen Frage ;)

    Ich möchte ein Policyupdate machen, nur wartet gpupdate nach Beendigung auf Tastendruck "n" + Enter bevor es schließt. nun habe ich folgendes eingehackt aber es will noch nicht so. Es macht den Update wartet dann aber trotzdem auf Taste n + Enter. Wobei das eigentliche "Update" sicher weniger als diese 10sek. läuft.


    [autoit]

    $gpupdate="gpupdate /force"
    $i=Run(@ComSpec & " /c " & $gpupdate , "", @SW_SHOW)
    Sleep(10000)
    ControlSend("","",$i,"n" & "{ENTER}")
    ProcessWaitClose($i)
    MsgBox(4096,"Info","Die Policy wurde erfolgreich upgedated")

    [/autoit]
  • Hmm und woher weis ich wie dieser Title vond er Dos-Box ist.

    Es wird ja kaum "C:\windows\system32\cmd.exe" sein - Das hat die als Überschrift

  • Nun, das ergebnis vom helper ist "C:\windows\system32\cmd.exe"

    Klappt damit dennoch nicht. Auch nicht, wenn ich den Pfad + gpupdate.exe teste. nochmal der aktuelle Code:

    [autoit]


    $gpupdate="gpupdate /force"
    $i=Run(@ComSpec & " /c " & $gpupdate , "", @SW_SHOW)
    Sleep(15000)
    ControlSend("C:\WINDOWS\system32\cmd.exe","",$i,"n" & "{ENTER}")
    IF (@error=1 AND ProcessExists($i)=0) Then
    MsgBox(4096,"Info","Die Policy wurde erfolgreich upgedated")
    Else
    MsgBox(4096,"Info","Es sind Fehler aufgetreten, bitte erneut versuchen")
    ProcessWaitClose($i)
    EndIf

    [/autoit]

    Einmal editiert, zuletzt von greetzz (30. November 2006 um 14:59)

  • Nur nochmal ganz langsam

    Du willst in das Command etwas schreiben und es dann ausführen ja?


    €€Edit!


    [autoit]

    Opt("WinWaitDelay",100)
    Opt("WinTitleMatchMode",4)
    Opt("WinDetectHiddenText",1)
    Opt("MouseCoordMode",0)
    Run('C:\WINDOWS\system32\cmd.exe')
    WinWait("C:\WINDOWS\system32\cmd.exe","")
    If Not WinActive("C:\WINDOWS\system32\cmd.exe","") Then WinActivate("C:\WINDOWS\system32\cmd.exe","")
    WinWaitActive("C:\WINDOWS\system32\cmd.exe","")
    Send("gpupdate /force")
    Sleep(3000)
    Send("{ENTER}")
    Sleep(2000)
    send("{ENTER}")

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

    if @error Then

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

    MsgBox(0, "Error!", "Error!!!")

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

    else

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

    sleep(1000)
    MsgBox(64, "Fertig!", "Fertig!!")

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

    Endif

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


    Die 2 Sends am ende sind nur eine Sicherheit - schaden aber auf keinen fall ;)

    Funtzt, ich habs 2 mal probiert!


    (Quelle: Mein Defrag Script :) )

    3 Mal editiert, zuletzt von huggy (30. November 2006 um 15:07)

  • Fast! Ich möchte die gpupdate.exe mit Parameter /force ausführen. Diese startet in einer cmd-box, da es ja ein windowstool ist.
    Am ende bleibt die Box mit der Aufforderung stehen, dass man ein "n" + ENTER eingeben soll...


    Screenshot siehe Anhang - An dieser Stelle soll automatisch n + {ENTER} eingegeben werden.

  • Zwecks Übersichtlichkeit, neuer Post:
    Habe es mit einer Modifikation deines Tips nun geschafft.

    [autoit]

    Opt("WinWaitDelay",100)
    Opt("WinTitleMatchMode",4)
    Opt("WinDetectHiddenText",1)
    Opt("MouseCoordMode",0)
    Run('C:\WINDOWS\system32\cmd.exe',"", @SW_SHOW)
    WinWait("C:\WINDOWS\system32\cmd.exe","")
    If Not WinActive("C:\WINDOWS\system32\cmd.exe","") Then WinActivate("C:\WINDOWS\system32\cmd.exe","")
    WinWaitActive("C:\WINDOWS\system32\cmd.exe","")
    Send("gpupdate /force")
    Send("{ENTER}")
    Sleep(20000)
    Send( "n" & "{ENTER}" & "exit" & "{ENTER}")
    MsgBox(0,"","Die Policy wurde erfolgreich erneuert")

    [/autoit]
  • hoi,
    schon mit StdinWrite versucht?

    [autoit]


    #include <Constants.au3>
    $gpupdate="gpupdate /force"
    $i=Run(@ComSpec & " /c " & $gpupdate , "", @SW_SHOW,$STDIN_CHILD)
    Sleep(15000)
    StdinWrite($i, "n" & @CRLF)
    StdinWrite($i)
    IF (@error=1 AND ProcessExists($i)=0) Then
    MsgBox(4096,"Info","Die Policy wurde erfolgreich upgedated")
    Else
    MsgBox(4096,"Info","Es sind Fehler aufgetreten, bitte erneut versuchen")
    ProcessWaitClose($i)
    EndIf

    [/autoit]