Datum setzen und cmd Datei ausführen

  • Hi

    Ich habe zwei kleine Probleme mit AutoIt und hoffe, dass mir geholfen werden kann. ;)

    1. Wie kann ich das Datum des PC um 2 Jahre zurück setzen bzw. wieder nach vorne setzen? Ich möchte dies auf einem XP Prof Rechner tun, allerdings ist der Benutzer ein eingeschränkter Benutzer, d.h. man bräuchte wohl Administratorrechte.

    2. Wie kann man eine .cmd Datei ausführen? Man braucht wieder Administratorrechte um die Datei auszuführen, der angemeldete Benutzer, der das autoit Skript ausführt, ist aber wiederrum nur ein eingeschränkter Benutzer.

    Einmal editiert, zuletzt von Helveticus (9. Dezember 2011 um 12:16)

  • Versuch bei 1. mal:

    [autoit]

    #include <GuiConstantsEx.au3>
    #include <Date.au3>
    #include <WindowsConstants.au3>

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

    ; Under Vista the Windows API "SetLocalTime" may be rejected due to system security

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

    Global $iMemo

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

    _Main()

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

    Func _Main()
    Local $hGUI, $tCur, $tNew

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

    ; Create GUI
    $hGUI = GUICreate("Time", 400, 300)
    $iMemo = GUICtrlCreateEdit("", 2, 2, 396, 296, $WS_VSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    GUISetState()

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

    ; Show current local time
    $tCur = _Date_Time_GetLocalTime()
    MemoWrite("Current date/time .: " & _Date_Time_SystemTimeToDateTimeStr($tCur))

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

    ; Set new local time
    $tNew = _Date_Time_EncodeSystemTime(8, 19, @YEAR, 3, 10, 45)
    If Not _Date_Time_SetLocalTime(DllStructGetPtr($tNew)) Then
    MsgBox(4096, "Error", "System clock cannot be SET" & @CRLF & @CRLF & _WinAPI_GetLastErrorMessage())
    Exit
    EndIf
    $tNew = _Date_Time_GetLocalTime()
    MemoWrite("New date/time .....: " & _Date_Time_SystemTimeToDateTimeStr($tNew))

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

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    EndFunc ;==>_Main

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

    ; Write a line to the memo control
    Func MemoWrite($sMessage)
    GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
    EndFunc ;==>MemoWrite

    [/autoit]

    Ist ein Beispiel aus der AutoIT hilfe

  • 1. Wie kann ich das Datum des PC um 2 Jahre zurück setzen bzw. wieder nach vorne setzen? Ich möchte dies auf einem XP Prof Rechner tun, allerdings ist der Benutzer ein eingeschränkter Benutzer, d.h. man bräuchte wohl Administratorrechte.

    Das ist fast richtig - Ja nur jemand mit Administorenrechten darf die Zeit ändern. Jedoch kann der Administrator jemand das Recht dazu gewähren, ohne das dieser Administrator werden muss (Sicherheitsrichtlinien). Egal mit welcher Methode du die zeit ändern willst (über Menü oder CMD Datei), ohne die passenden Rechte geht es nicht.
    Bitte beachte das, falls du einfach so die Zeiten änderst, du bei einem Rechner der in einer Domäne ist es schnell haben kannst, das dieser mit dem Rest des Netzwerkes nicht mehr kommunizieren kann bzw. du dich nichteinmal mehr anmelden kannst. Es sind nur gewisse Abweichungen in der Zeit zum restlichen Netzwerk erlaubt.

    2. Wie kann man eine .cmd Datei ausführen? Man braucht wieder Administratorrechte um die Datei auszuführen, der angemeldete Benutzer, der das autoit Skript ausführt, ist aber wiederrum nur ein eingeschränkter Benutzer.


    Von der Sache Herr darf jeder Benutzer Batch Dateien (.cmd) ausführen. Jedoch kann ein Administrator per Sicherheitsrichtlinie dieses verbieten (bzw. den Aufruf der CMD.exe) - dagegen kannst du nicht tun - ausser halt kein cmd.exe zu verwenden.
    Es gibt zwar eine gern vergessene Lücke - aber du möchtest sicherlich nicht deinen "Adinistrator" verärgern, er wird schon einen grund dafür gehabt haben.

    Ansonsten - eine CMD Datei kannst du mit Run oder ShellExecute (und deren Wait-Varianten) ausführen - in der Hilfe sind auch Beispiele dazu.

    Sonst hilf mir doch auf die Sprünge was das eigentliche Problem ist, das du die Zeit verstellen willst - eventuell kann ich auch eine andere Lösung beisteuern.

    BLinz

  • Vielen Dank.

    Frage 2 ist jetzt klar.

    zu 1. Das Datum kann ich also verändern mit

    Zitat


    $tNew = _Date_Time_EncodeSystemTime(8, 19, @YEAR, 3, 10, 45)


    Nun möchte ich ja, dass das Jahr einfach auf 2009 gesetzt wird, aber die
    Uhrzeit und Datum gleich bleibt. Wie geht denn das? Und wie führe ich
    das AutoIt Skript dann mit Administratorrechten aus damit die Uhrzeit
    auch wirklich gesetzt werden kann?

  • Morgen, also sollte es von deinem Admin blockiert sein die CMD aufzurufen wird er schon einen Grund dafür haben.., aus welchem Grund sollte man die Systime um 2 Jahre zurücksetzen.. mir fallen nur Gründe ein wie zb Keys verwenden bzw Abgelaufene Trail Versionen von verschiedenster Software und soweit ich weiß wird so etwas von diesem Forum nicht supportet, sollte ich mich irren sorry.

    Um die Systemzeit zu verändern gibt es für die cmd die 'date' und 'time' Funktion, diese erklären sich von selber.. falls nicht (Befehl /?) gibt die Hilfe zum Befehl aus.

    PS: Systemzeiten können MEISTENS nicht durch den Benutzer editiert werden, wird zumindest in fast allen Betrieben so gehandhabt, somit musst du also zwingend Admin sein um diese Einstellungen zu verändern.

    Gruß Marvin

  • Der PC gehört mir und ich bin selbst Systemadmin. Das AutoIt Skript läuft aber auf einem Konto mit eingeschränkten Rechten. Wie kann ich denn das AutoIt Skript als Admin laufen lassen?

    Ok mit der cmd und date geht es, aber wie kann ich das in ein AutoIt Skript oder eine batch Datei packen? Und wie mache ich es, dass nur das Jahr verändert wird? Das ist auch eines meiner Problem bei der AutoIt Funktion _Date_Time_EncodeSystemTime.

  • Hey, geb doch einfach bei dem RunAs Befehl den User usw mit und Führe in der Selben Zeile noch die Date Konfig druch, der RunAS Befehl führt ja immer die Zeile in der er verwendet wird unter einem anderen Benutzer aus somit setze einfach in der Selben Zeile deine date Befehle ab und fertig :P

    [autoit]


    RunAs('username',@ComputerName,'passwort',1,@ComSpec & " /c" & 'date 10/10/2009','',@SW_HIDE)

    [/autoit]

    sowas hier in der Art sollte glaube ich gehen :P
    Gruß

  • Wow cool Protex, werde es probieren.

    Aber wie setze ich denn mit dem Date Befehl nur das Jahr auf 2009 und verwende aber den aktuellen Monat und Tag? Und wie mache ich das wieder rückgängig, also wieder Jahr 2011?

  • Ich habe doch noch ein Problem. Folgendes funktioniert nicht.

    [autoit]

    RunAs('username',@ComputerName,'passwort',1,@ComSpec & " /c" & 'date @MDAY/@MON/2009','',@SW_HIDE)

    [/autoit]

    Man müsste den String 'date @MDAY/@MON/2009' irgendwie aus einzelnen Strings zusammensetzen. Also 'date' + '' + @MDAY + '/' + @MON + '/' + '2009'. Aber ich denke nicht, dass das so funktioniert. Wie macht man das?

  • [autoit]


    $command = 'date ' & @MDAY &'-'& @MON &'-2009'
    RunAs('user',@ComputerName,'pw',1,@ComSpec & " /c" & $command,'',@SW_HIDE)

    [/autoit]

    nicht getestet..

    Gruß

  • Vielen Dank. Es funktioniert zwar, aber ein Problem gibt es noch und zwar ein sehr komisches Problem.

    Führe ich das Skript einmal aus, dann wird das Jahr korrekt auf 2009 gesetzt, das Datum wird aber immer auf den 15. September gesetzt und es wird nicht das aktuelle Datum weiterverwendet, obwohl vorher das aktuelle Datum eingsestellt war. Führe ich das Skript dann noch einmal aus, dann wird plötzlich das aktuelle Datum gesetzt.

    Ein Beispiel am heutigen Datum. Das Datum des PCs ist auf 09.12.2011 gesetzt. Ich führe das Skript aus. Das Datum wird auf den 15.09.2009 gesetzt. Ich führe das Skript noch einmal aus. Das Datum wird auf den 09.12.2009 gesetzt.

    Was läuft da falsch?