Zeit-Steuerung @ Windows

Jobs zu bestimmten Zeiten ausführen

Für die System-Verwaltung ist es wichtig, Jobs zu vorbestimmten Zeiten automatisch auszulösen. Diese Seite demonstriert einige der Möglichkeiten auf Windows-Betriebssystemen
Windows Windows-Betriebssysteme, Server (WAMP)
Kalender & Zeit Spezielle Aspekte der Informationstechnik
Ausgabe Lesen von Datum und Zeit
Eingabe Schreiben von Datum und Zeit
Zeitzone Auswahl der Zeitzone
NTP Zeit-Synchronisation mit einem externen Zeit-Server
Script Definition des Jobs in einem Script
Geplante Tasks Zeit-gesteuerte Aufträge in Windows-Systemen
at Das Konsolen-Programm at
Registry Datum & Zeit in der Registry-Datenbank
Uptime Interrupt, Ticks, Jiffy, Zeit seit System-Start
Cygwin Cygwin Professionelle Datum & Zeit-Funktionen auch auf Windows
Datum und Zeit Standards, Betriebssystem, Linux,
Datum & Zeit mit C/C++, Javascript, Perl, PHP, SQL, VBA, ..
Links Ausgewählte Links zum Thema 'System Datum & Zeit'

Ausgabe von Datum und Zeit

cmd.exe Datum und Zeit lesen

Sie können das System-Datum ihres PC auf der Konsole (Eingabeaufforderung) ausgeben:
Option /T liefert das Datum im eingestellten lokalen Format und stellt keine Fragen.

C:\> date /T
dd.mo.yyyy
In der PowerShell (ab Windows-7) gibt es einen Befehl zur Ausgabe von Datum+Zeit:
C:\> powershell
PS C:\> get-date
Sie können die System-Zeit ihres PC auf der Konsole ausgeben:
Option /T liefert die Zeit im eingestellten lokalen Format (leider ohne Sekunden) und stellt keine Fragen.
Genauer ist die Ausgabe der → Umgebungs-Variablen %time%
C:\> time /T
12:34
C:\> echo %time%
12:34,56

Umgebungs-Variable

In den → Umgebungs-Variablen %date% und %time% stehen Datum und Zeit (im eingestellten lokalen Format !) zur Verfügung.
Diese Variablen haben eine Sonderstellung: Sie erhalten jeweils die aktuellen Werte und scheinen nicht in der Variablen-Liste auf (Konsolen-Befehl set ).
Bei Ausgabe an der Konsole (rechts) wird die Zeit auch in Sekunden angezeigt.

C:\> echo %date%
dd.mo.yyyy
C:\> echo %time%
12:34:56,78
C:\> echo %date %time%
dd.mo.yyyy 12:34,56

Script-Programme

verwenden die Umgebungs-Variablen %date% und %time%
Beispiel ISO-8601 Format:
Das Programm date_iso.cmd (rechts) setzt in der Variablen iso einen String im Standard → ISO-8601-Format zusammen, und gibt das Ergebnis an der Konsole aus.
Die Variable %isodate% kann auch von anderen Programmen verwendet werden, wenn sie unmittelbar vorher erzeugt wurde.
Script-Programm C:\Programme\_myprox\date_iso.cmd
@echo off
set isodate=%date:~6,4%-%date:~3,2%
set isodate=%isodate%-%date:~0,2% %time:~0,2%
set isodate=%isodate%:%time:~0,2%:%time:~3,2%
echo %isodate%
Aufruf des Script-Programms (Wenn der Pfad in der Umgebungs-Variablen PATH enthalten ist):
C:\> date_iso
2000-01-01 12:34:56
Beispiel Log-Datei:
Verwendung in Log-Dateien: Das Programm log_demo.cmd (rechts) trägt die aktuelle Zeit in eine Log-Datei ein: Der Text der Datei c:\log_demo.txt wird bei jedem Aufruf des Programms um eine Zeile ergänzt.
Verwenden sie für Logs nach Möglichkeit immer das → ISO-8601 Standard-Format: Es ist international eindeutig, und lässt sich leicht automatisch sortieren und auswerten.
In realen Anwendungen wird natürlich nach dem Datum die eigentliche Information des jeweiligen Logs eingetragen, hier mit einem kurzen Text simuliert.

Details zum Commandline-Interpreter (Konsolen-Programmierung) auf Windows, und zum Standard ISO-8601 Format für Datum & Zeit.
Script-Programm C:\Programme\_myprox\log_demo.cmd
@echo off
date_iso
set logtxt=%isodate%
set logtxt=%logtxt% Das ist ein Test
echo %logtxt% >> c:\log_demo.txt
Aufruf des Script-Programms (Wenn der Pfad in der Umgebungs-Variablen PATH enthalten ist):
C:\> log_demo
Rufen sie das Programm mehrmals auf und zeigen sie dann die Log-Datei an:
C:\> type c:\log_demo.txt

Pause

Die Windows-Konsole bietet keine brauchbare Anweisung, um ein Script-Programm für eine bestimmte Zeit anzuhalten.
Die Anweisung pause ist zwar vorhanden, sie schreibt jedoch zwangsweise eine Meldung und wartet auf die Eingabe einer Taste. Das ist für ein automatisch ablaufendes Programm unbrauchbar.

Die Option -w des immer verfügbaren Programms ping hält ein Programm (ungefähr !) für die angegebene Zahl von Millisekunden an:
@echo off
echo %TIME%
ping 10.0.0.0 -n 1 -w 500 > NUL
echo %TIME%
Cygwin Cygwin bietet eine professionelle Ergänzung der veralteten Windows-Konsole.
Mit Cygwin lassen sich u.a. zahlreiche auf Windows schmerzlich fehlende → Datum & Zeit-Funktionen installieren.
Die Server 2003 Resource Kit tools von Microsoft enthalten ein brauchbares sleep Programm, das in Sekunden oder Millisekunden einstellbar ist. Das Programm funktioniert u.a. auch mit Windows-XP.

Eingabe von Datum und Zeit

cmd.exe Befehl date ohne Option zeigt das aktuelle Datum an und fordert zur Eingabe auf. Zahlen können wahlweise mit/ohne führende Nullen eingegeben werden, das Jahr 2stellig oder 4stellig. Taste <return> quittiert ohne Änderung.
Befehl date mit einem neuen Datum setzt (schreibt) das Systemdatum - Diese Version kann auch automatisch (z.B. von einem Script-Programm) ausgeführt werden.
Befehl date mit Option /T gibt das Datum ohne Fragen aus.
C:\> date
Aktuelles Datum: 29.02.2000
Geben sie das neue Datum ein (TT-MM-JJ): 01-01-00
C:\> date /T 01-01-00
Befehl time ohne Option zeigt die aktuelle Zeit an und fordert zur Eingabe auf. Man kann auch Sekunden eingeben. Taste <return> quittiert ohne Änderung.
Befehl time mit einer neuen Zeit setzt (schreibt) die Systemzeit. - Diese Version kann automatisiert werden.
C:\> time
Aktuelle Zeit: 12:34:56,78
Geben sie die neue Zeit ein: 12:34
C:\> time /T 12:34:56

Kontrollfeld "Datum und Zeit"

Jedes meuere Windows Betriebssystem wird mit diesem Kontrollfeld ausgeliefert:
C:\WINDOWS\system32\timedate.cpl
Normalerweise ist das Kontrollfeld in der Taskleiste (rechte untere Bildschirm-Ecke) und in der Systemsteuerung (Start | Einstellungen | Systemsteuerung) installiert. Es lässt sich jedoch auch auf der Konsole durch Eingabe von timedate.cpl starten.
Details zu Kontrollfeldern der Systemsteuerung

Mit Hilfe von 3 Register-Karten Datum und Uhrzeit | Zeitzone | Internetzeit werden damit alle wesentlichen Datum & Zeit Parameter des Betriebssystems eingestellt.
Die Auswahl wird z.T. durch Einträge in der Registry-Datenbank gesteuert (Kapitel ↓ Zeitzone).

Auswahl der Zeitzone in Windows-Systemen

In der rechten unteren Ecke der Win-Taskleiste befindet sich normalerweise die laufende Anzeige der PC-Systemzeit.
Rechtsklick ermöglicht die Änderung von Datum und Uhrzeit.

Man kann das Kontrollfeld auch durch Angabe des Datei-Namens in Startmenü | Ausführen oder in einem Konsolen-Fenster (Eingabeaufforderung cmd.exe) starten:
C:\> timedate.cpl
Die Zeitzone kann aus einer Liste gewählt werden.
Das Register 'Internetzeit' ermöglicht die Synchronisation mit einem externen Zeitserver.

Details zum Network Time Protocol NTP.
Alle folgenden Angaben betreffen die intern verwendeten Daten:
Achtung: Durch eine unbedachte Änderung der Registry-Daten kann man die Funktion von Betriebssystem und / oder Programmen beeinträchtigen oder zerstören.
Umgekehrt ist es durch manuelle Änderung möglich, korrupte Daten richtigzustellen. Notieren sie zur Sicherheit vor jeder Änderung der Registry deren Original-Daten.

Time Zones

Sämtliche wählbare Daten der Zeitzonen-Liste befinden sich in der Registry-Datenbank:
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones

Mit dem Programm regedit.exe kann man die Registry-Daten ansehen und / oder ändern (Vorsicht - Nur für erfahrene AnwenderInnen !). Das Programm ist in allen gängigen Windows-Versionen enthalten.
Wichtige Sub-Schlüssel:
(Die Namen der Schlüssel in der Registry scheinen ohne Bedeutung zu sein).
GMT Standard Time (GMT-Normalzeit und GMT-Sommerzeit) und Greenwich Standard Time, entsprechend der Weltzeit UTC (die nicht erwähnt wird).
Central Europe Standard Time, Central European Standard Time, Romance Standard Time und W.Europe Standard Time bezeichnen nicht (!) die westeuropäische Zeit sondern die Mitteleuropäische Zeit MEZ bzw. CET mit +1h Offset.
E. Europe Standard Time, FLE Standard Time und GTB Standard Time bezeichnen die Osteuropäische Zeit EET mit +2h Offset.
Die Datenfelder der Schlüssel (ohne Gewähr !):
Die Aufklapp-Liste des Zeitzone Steuer-Elements der Taskleiste wird durch die Felder Display und Index gesteuert. Display gibt dne angezeigten Text an, Index die Position in der Liste.
Die Zeitzone wird in verschiedenen Angaben zur 'Umgebung' von Programmen als Text angegeben. Dazu werden die Felder Std und Dlt verwendet, je nach Normalzeit oder Sommerzeit (Daylight Savings Time).
Das Feld MapID enthält 2 Zahlen, die sich vermutlich als Koordinaten auf die angezeigte Weltkarte beziehen.
Das Feld TZI (Time Zoner Information) enthält die intern tatsächlich verwendeten Daten, in bewährter M$-Tradition gut versteckt.
Offset der Zeitzone:
Negative Werte bezeichnen Zonen östl. Greenwich, positive westl. Greenwich. Daher wird die Mitteleuropäische Zeit CET mit den Bytes C4 FF FF FF angegeben. In der Tabelle rechts sind die Stunden wie meist üblich in umgekehrter Logik angegeben, d.h. positive Werte für Zonen östl. Greenwich.
Die übrigen Bytes enthalten u.a. Angaben zu Datum und Zeit der Umstellung zwischen Normalzeit und Sommerzeit.
Time Zone Information TZI
Die ersten 4 Byte enthalten den Offset der jeweiligen Zeitzone in Minuten als 4-Byte Integer Zahl. Das unwichtigste (least significant) Byte wird zuerst angeführt, das wichtigste (most significant) zuletzt. Negative Zahlen werden im → 2er-Komplement gespeichert.
Das ergibt z.B. folgende Werte
Binär-WertDezimal (-min)Stunden
D0 02 00 00720-12
94 02 00 00660-11
58 02 00 00600-10
3C 00 00 0060-01
00 00 00 00000
C4 FF FF FF-60+01
88 FF FF FF-120+02
6C FD FF FF-660+11
30 FD FF FF-720+12

TimeZoneInformation

Wenn mit dem Kontrollfeld Datum & Zeit der Taskleiste die Zeitzone ausgewählt wird, dann findet man die aktuell verwendeten Daten in diesen Schlüsseln:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ TimeZoneInformation

Die Registry enthält normalerweise für jeden angelegten User einen eigenen ControlSet mit fortlaufender Nummer, d.h. ControlSet001, ControlSet002, ..
Je nach Anmeldung (Login) wird der jeweilige User-ControlSet in einen zusätzlichen CurrentControlSet kopiert, welcher die aktuell verwendeten Daten enthält.
Änderungen führen sie am besten mit dem Kontrollfeld timedate.cpl aus, das man auch aus der Taskleiste mit 'Datum und Uhrzeit ändern' starten kann.
Alternativ kann man mit regedit.exe die Daten in jedem einzelnen ControlSet ändern - Das sollte jedoch (wie jede andere Registry-Änderung) nur mit guten System-Kenntnissen erfolgen. Eine Änderung des CurrentControlSet ist sinnlos, weil sie bei jeder neuen Anmeldung überschrieben wird.
Bias gibt den Offset der Zeitzone in (negativen) Minuten als 4-Byte Integer Zahl an. z.B. 0xFFFFFFC4 für -60 Minuten bzw. +01 Stunden der Mitteleuropäischen Zeit CET.
DaylightBias gibt den zusätzlichen (!) Offset durch die Sommerzeit an, in der EU 0xFFFFFFFC entsprechen 1 zusätzlichen Stunde.
ActiveTimeBias gibt den gesamten aktuell verwendeten Offset an, d.h. den Offset der Zeitzone + allenfalls den zusätzlichen Offset der Sommerzeit.
StandardName und DaylightName enthalten die angezeigten Texte dieser Umgebungs-Daten.
StandardStart und DaylightStart enthalten Datum und Zeit der Umstellung auf Normalzeit bzw. Sommerzeit als Strukturen von je 8 2-Byte Integer Zahlen. Die Zahlen bedeuten Null, Monat, ??, Stunde, danach Null. z.B.
00 00 03 00 05 00 02 00 00 00 00 00 00 00
Monat=0003 bezeichnet den März, Stunde=0002 die Uhrzeit 02:00. Unklar ist die Bedeutung der 3.Zahl 0005, da es sich nicht um den Tag der Umstellung handelt (evtl. für einen Code der Bedeutung 'am letzten Sonntag').

Konsolen-Programm w32tm

Starten sie eine → Konsole (Eingabeaufforderung) cmd.exe und testen sie das Programm w32tm.exe

Umfangreiche Hilfe:
C:\> w32tm /?

Ausgabe der aktuellen Zeitzonen-Einstellung:
C:\> w32tm /tz
Gibt einen komplizierten Text aus, sehr ähnlich dem Registry Editor.
Für Menschen wenig verständlich, für die Weitergabe der Daten unangenehm kompliziert.

Ausgabe von einzelnen oder allen Registry-Daten des Schlüssels
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ W32Time
C:\> w32tm /dumpreg

Ausführung einer neuen Zeit-Synchronisation:
C:\> w32tm /resync
C:\> w32tm /resync /nowait
C:\> w23tm /resync /computer:192.168.0.2
Die Ausführung ohne Option wartet einige Sekunden bis zur Fertigstellung (manuelle Ausführung).
Für die Automatisierung eignet sich die asynchrone Option /nowait. Dieser Befehl kann z.B. von Script-Programmen oder vom ↓ Scheduler verwendet werden.
Die Option /computer erlaubt die Angabe eines bestimmten PC mit IP-Adresse oder Name als Synchronisations-Server. Ohne Angabe wird die Standard-Einstellung der Registry verwendet.

Einmalige oder laufende Messung der Zeit-Differenz zu einem anderen PC (Diagnose):
C:\> w32tm /stripchart /computer:192.168.0.2
Ersetzen sie die IP-Adresse 192.168.0.2 durch Adresse oder Name eines beliebigen PC (Linux, Windows, ..) im Netzwerk oder im Internet.

Linux-Zeitzone TZ

Auf Linux-Systemen wird die Zeitzone durch eine → Umgebungs-Variable TZ angegeben, und zwar als Text in der Form Zone/City, z.B. Europe/Berlin oder Europe/Vienna oder Europe/Zurich

Einige von Linux nach Windows portierte Programme (→ Cygwin, → PHP, ...) erwarten diese Umgebungs-Variable. Es wird empfohlen, sie auch auf Windows einzurichten.
Details zu den Themen Zeit, Zeitzone, Sommerzeit und Umgebungs-Variable  

Definition eines Jobs durch ein Script

Wenn sie planen, einen Job zeitgesteuert zu starten, dann erstellen sie dafür am besten ein kleines Script:
Beispiel: Im → Script-Programm C:\scripts\testjob.cmd wird ein Job definiert: Damit wird zur Ausführungszeit ein Verzeichnis erstellt, in dessen Name Datum und Zeit enthalten sind - so ist leicht zu kontrollieren, ob und wann der Job tatsächlich ausgeführt wurde.
Script-Programm C:\scripts\testjob.cmd
@echo off
set d=c:\test\d
set d=%d%%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
set d=%d%%TIME:~0,2%%TIME:~3,2%
if not exist %d% (
mkdir %d%
set n=%d:~-13%
echo %n% wurde erzeugt
)
Testen und Debuggen sie ihr → Script-Programm durch manuellen Start. Verwenden sie möglichst nur absolute Pfade für Verzeichnisse und Dateien. Manueller Start des Scripts:
C:\> c:\scripts\testjob
c:\test\dYYYYMODDhhmi wurde erzeugt

Geplante Tasks

Neuere Win-Systeme enthalten ein komfortables Programm für die manuelle Einstellung Zeit-programmierter Jobs. Eingetragene Jobs können sie mit Rechtsklick öffnen und deren Einstellungen ändern.
Neue Jobs tragen sie mit Menübefehl Datei | Neu | Geplanter Task ein.
In diesem Programm werden sowohl einmalige als auch periodisch wiederholte Jobs verwaltet.
Hier finden sie auch Jobs, welche mit dem Programm at (s.u.) programmiert wurden ! Umgekehrt finden sie jedoch manuell eingetragene Jobs nicht im Programm at !

Das Feld 'Ausführen'

Hier wird die Befehlszeile eingetragen. Sie sollte vor der Eintragung unbedingt manuell getestet werden:
Öffnen sie eine → Konsole cmd.exe und versuchen sie den Auftrag manuell zu starten. Geben sie im Zweifel immer den kompletten Pfad an.
So wird das angegebene Programm (test.exe) gestartet:
C:\> c:\programme\test.exe
Wenn der Pfad Leerzeichen enthält, dann muss er in "" gesetzt werden:
C:\> "c:\programme\internet explorer\iexplore.exe"
Nach dem Pfad kann man Argumente an das Programm übergeben. Hier wird vom Editor gleich die angegebene Text-Datei geöffnet.
C:\> c:\windows\notepad.exe c:\test.txt
So werden auch Script-Programme (Perl, PHP) gestartet:
C:\> c:\programme\perl\bin\perl.exe c:\test.pl xyz
Damit wird das Script-Programm test.pl mit dem → Perl-Interpreter gestartet und der Text "xyz" als Argument an das Script-Programm übergeben.
Wenn die Befehlszeile manuell funktioniert, dann tragen sie ihn (ohne das hier angegebene C:\> in das Feld Ausführen des Schedulers ein.

Das Feld 'Ausführen in'

Hier wird der Pfad zum Arbeits-Verzeichnis (current working directory, cwd, pwd) eingetragen. Die Wirkung ist die gleiche, wie wenn sie mit cd-Befehlen der Konsole in ein bestimmtes Verzeichnis wechseln.
Wenn das gestartete Programm Relative Pfade verwendet, dann beziehen sie sich auf das hier angegebene Verzeichnis. Wenn sie im Programm Datei-Namen ohne Pfade verwenden (z.B. test.txt) dann werden diese Dateien im Arbeits-Verzeichnis gesucht.
Geben sie in das Feld des Schedulers den gewünschten Pfad ein, im Zweifel einfach c:\
Die Verwendung von absoluten Pfaden ist in jedem Fall sicherer und macht ihr Programm unabhängig von der Einstellung des Arbeits-Verzeichnisses.

Das Feld 'Ausführen als'

Hier wird jener User eingetragen, in dessen Namen das Programm ausgeführt werden soll.
Das kann ein beliebiger User sein, er muss zur Ausführung nicht angemeldet sein.
Der User muss in Systemsteuerung | Benutzerkonten mit Passwort eingetragen sein. User ohne Passwort dürfen keine Scheduler-Tasks ausführen.
Nach Eintragung des Users muss sein Passwort bestätigt werden (identisch mit seinem Anmelde-Passwort).
Bei der Ausführung des Auftrags werden die Zugriffs-Rechte des eingetragenen Users angewendet (deshalb wird hier meist ein Administrator eingetragen).
Weitere nützliche Optionen:

Leerlaufzeit

Das ist sinnvoll, wenn ein Auftrag nicht zu einer genauen Zeit ausgeführt werden muss, sondern "wenn Zeit dazu ist".

Energieverwaltung

Das ist (nur) für Notebook-PC sinnvoll.
Die Optionen 'Erweiterter Zeitplan' und 'Mehrfacher Zeitplan' erlauben sehr komplexe Zeitpläne.
Übersichtlicher ist es, mehrere Scheduler-Tasks anzulegen und diese eindeutig zu benennen. Jeder dieser Aufträge kann das gleiche Programm starten, jedoch mit unterschiedlichen Zeitplänen.

Test !

Testen sie nach der Eintragung und nach jeder Änderung, ob ihr Auftrag überhaupt ausgeführt werden kann.
Dazu müssen sie als jener User angemeldet sein, der im Feld 'Ausführen als' eingetragen wurde.
Rechtsklick auf den Auftrag, Befehl Ausführen
Tipp: Lassen sie nicht zu viele Tasks direkt nach Systemstart laufen. Ein paar Minuten später ist meist viel mehr Zeit übrig.
Lassen sie periodische Tasks nicht zu einem runden oder zum gleichen Zeitpunkt laufen. Besser ist z.B. Task A täglich um 09:35, Task B um 09:38 usw.
Wenn sie eigene Programme mit dem Scheduler starten, dann sollten diese zur einfachen Kontrolle ihre eigene Log-Datei schreiben.
Der Scheduler schreibt eine Log-Datei (reiner Text). Der Pfad kann sich je nach System-Version ändern:
C:\Windows\SchedLgu.txt
Wenn ein Auftrag nicht planmäßig ausgeführt ührt wurde, dann finden sie im Log eine Erklärung.
Wenn sie mit dem Scheduler eigene Programme starten, dann sollten diese ihr eigenes Log schreiben. Das bringt mehr Übersicht, außerdem können sie das Log in einem Format anlegen, das sich automatisch auswerten lässt.
Die Auftragsliste oder die Parameter der Aufträge sind (vermutlich) nicht zugänglich. Die "Geplanten Tasks" sind im Verzeichnis C:\Windows\Tasks enthalten, jedoch nicht als zugängliche Dateien.

Steuerung durch das Konsolen-Programm   at

Das Konsolen-Programm at war bereits in älteren Win-Systemen verfügbar, wurde jedoch wegen seiner komplizierten Syntax selten benutzt.
Den verantwortlichen Dienst finden sie in der Liste der Dienste unter "Taskplaner" oder "Scheduler" oder "NetSchedule" - Es sollte in jedem System automatisch gestartet werden.
at ist betagt und wird offenbar nicht mehr weitergeführt, stellt aber - abgesehen von VB-Programmen die einzige (?) Möglichkeit dar, zeitgesteuerte Jobs durch ein Konsolen-Programm zu beauftragen.
Der Service-Manager von Windows:
C:\Windows\System32\services.msc
Services (Dienste) sind Programme, die ohne "Oberfläche" im Hintergrund laufen.

Liste

at ohne Argumente zeigt die aktuelle Liste aller (mit at) programmierten Jobs.
Mit "Geplante Tasks" erstellte Jobs werden nicht aufgelistet !
Liste der at-Aufträge
C:\> at
Es sind keine Einträge in der Liste

Syntax

AT [\\Computer-Name] Zeit [/INTERACTIVE] [ /EVERY:Datum[,...] | /NEXT:Datum[,...]] Befehl
Computer-Name: (optional)
Als PC-Name kann der Name (1.Zeile) oder die IP-Adresse (2.Zeile) verwendet werden. (ersetzen sie MYPC bzw. 192.168.0.3).
Wenn kein PC-Name definiert wird (3.Zeile), dann wird der Befehl an den gleichen PC erteilt, auf dem der Befehl ausgeführt wird.
Beispiel:
at \\MYPC 12:34 c:\test\testjob.cmd
at \\192.168.0.3 12:34 c:\test\testjob.cmd
at 12:34 c:\test\testjob.cmd
Zeit im Format hh:mm
muss angeführt werden. at versteht die international übliche 24-Stunden-Zeit.
Kennung: Nach erfolgreicher Vergabe eines Auftrags an at erfolgt eine Meldung mit Angabe der Kennung: Eine laufende Zahl, welche jeden at-Job eindeutig identifiziert.
at 12:34 c:\test\testjob.cmd
Neuer Auftrag hinzugefügt. Kennung = 1
Periodische Ausführung (optional)
Mit Option EVERY wird die Wiederholung definiert. Führt den Befehl zu jedem der angegebenen Tage der Woche (z.B. jeden Mo bzw. Mo/Mi/Fr) aus.
Zahlen bezeichnen den Monatstag, (hier z.B. jeden 1. oder jeden 1. und 15.)
Mehrere Angaben werden durch Beistrich getrennt. Ohne Angabe wird der aktuelle (heutige) Tag angenommen.
at 12:34 /every:Mo c:\test\testjob.cmd
at 12:34 /every:Mo,Mi,Fr c:\test\testjob.cmd
at 12:34 /every:1 c:\test\testjob.cmd
at 12:34 /every:1,15 c:\test\testjob.cmd
Nächste Ausführung (optional)
mit Option NEXT wird die Ausführung zum nächsten Wochentag oder Tag des Monats festgelegt. Mehrere Angaben werden durch Beistrich getrennt. Ohne Angabe wird der aktuelle Tag angenommen.
at 12:34 /next:Mo c:\test\testjob.cmd
at 12:34 /next:10,20 c:\test\testjob.cmd
Die Vergabe von Jobs für ein bestimmtes Kalender-Datum erscheint (??) nicht möglich.
Man kann allerdings Scripts programmieren, die selbst das aktuelle ↑ Datum erheben und danach handeln.
Befehl
Der auszuführende Befehl, entweder eine Konsolen-Anweisung (z.B. copy ) oder ein Programm (Script-Programm).
+ Bekannte Endungen (.exe,.bat,.cmd) kann man weglassen.
+ Wenn die auszuführende Datei im Systempfad (PATH) liegt, dann kann die Angabe des Pfades entfallen - F ühren sie trotzdem den kompletten Pfad an, das ist sicherer !
+ Rufen sie Programme nicht direkt auf, sondern erstellen sie dafür ein ↑ Script - das lässt sich bequem testen.
at 12:34 testjob
at 12:34 testjob.cmd
at 12:34 c:\test\testjob.cmd

Angabe des Pfades kann entfallen, wenn
C:\> path
PATH=C:\Windows;...;c:\test;...
der Pfad zum auszuführenden Script im Systempfad enthalten ist.
Alle erfolgreich beauftragten Jobs werden sowohl in der at-Liste angezeigt als auch in den '↑ Geplanten Tasks'. Wenn sie einen beliebigen Parameter eines at-Jobs mit dem Programm "↑ Geplante Tasks" verändern, dann wird der Job zwar planmäßig ausgeführt, erscheint jedoch nicht mehr in der at-Liste !
C:\> at
KennungTagZeitBefehl
1Heute12:34testjob.cmd
2Jeden Mo12:34testjob.cmd
3Jeden 112:34testjob.cmd
C:\>

Löschen

at-Befehle können mit Option DELETE gelöscht werden
ID (optional) ... Die Kennung (siehe at-Liste)
Achtung: Ohne Angabe von ID werden alle at-Befehle gelöscht !
Option DELETE/YES löscht ohne interaktive Bestätigung.
Syntax:
AT [\\Computer-Name] [ [ID] [/DELETE] | /DELETE [/YES]]

Datum & Zeit @ Registry-Datenbank

Die meisten Daten zur Konfiguration des Windows-Betriebssystems und der installierten Programme werden in der Registry-Datenbank verwaltet.
Achtung: Eine unbedachte Änderung der Registry-Daten kann Betriebssystem und/oder Programme unbrauchbar machen und zur Zerstörung von Daten führen.
Die hier angeführten Tipps sind unverbindlich !
Die angeführten Beispiele sind nicht vollständig. - Einstellungen zum Thema Datum & Zeit finden sich sicherlich auch an anderen Stellen der Registry.
Zum Lesen und Ändern der Registry-Daten dient der Registry Editor regedit.exe
Achtung: Jede mit RegEdit ausgeführte Änderung ist sofort wirksam !
Das Programm enthält keinen Menü-Befehl Sichern.
Das Konsolen-Programm reg.exe dient ebenfalls zur Verwaltung der Registry, mit Schwerpunkt auf automatisierten Funktionen.
Jede moderne Programmiersprache bietet Funktionen zum Lesen und Schreiben der Registry, meist in einem eigenen Windows-Modul.

Datum & Kalender

Diese Daten sind für jeden User in diesen Schlüsseln getrennt angelegt:
HKEY_USERS \ [User-Schlüssel] - Control Panel \ International
Bei Änderung der Daten in HKEY_CURRENT_USER werden gleichzeitig die Daten des angemeldeten Users in HKEY_USERS geändert.
Am besten werden die Daten aller User in HKEY_USERS genau gleich eingetragen. In diesem Fall ist das (Datum + Zeit)-Verhalten des Systems für alle User gleich.

Kalender-Type (0..12), Gregorianischer Kalender (1)
HKEY_USERS \ .DEFAULT \ Control Panel \ International \ iCalendarType
HKEY_CURRENT_USER \ Control Panel \ International \ iCalendarType

Wochen-Beginn (0..6): In Europa 0 (Montag), in den USA 6 (Sonntag)
HKEY_USERS \ .DEFAULT \ Control Panel \ International \ iFirstDayOfWeek
HKEY_CURRENT_USER \ Control Panel \ International \ iFirstDayOfWeek

Kalender-Woche: Europa 2 (ISO-Standard), USA 0
HKEY_USERS \ .DEFAULT \ Control Panel \ International \ iFirstWeekOfYear
HKEY_CURRENT_USER \ Control Panel \ International \ iFirstWeekOfYear

Trennzeichen für das Datum (deutschsprachig . Punkt, US / Schrägstrich)
HKEY_USERS \ .DEFAULT \ Control Panel \ International \ sDate
HKEY_CURRENT_USER \ Control Panel \ International \ sDate

Lang-Format für das Datum (deutschsprachig dddd, d. MMMM yyyy )
HKEY_USERS \ .DEFAULT \ Control Panel \ International \ sLongDate
HKEY_CURRENT_USER \ Control Panel \ International \ sLongDate

Kurz-Format für das Datum (ISO yyyy-MM-dd oder deutschsprachig dd.MM.yyyy oder US m/d/yy )
HKEY_USERS \ .DEFAULT \ Control Panel \ International \ sShortDate
HKEY_CURRENT_USER \ Control Panel \ International \ sShortDate

Details zu den Themen Kalender, Woche, ISO-8601-Format

Uhrzeit

Diese Daten sind für jeden User in diesen Schlüsseln getrennt angelegt:
HKEY_USERS \ [User-Schlüssel] - Control Panel \ International
Bei Änderung der Daten in HKEY_CURRENT_USER werden gleichzeitig die Daten des angemeldeten Users in HKEY_USERS geändert.
Am besten werden die Daten aller User in HKEY_USERS genau gleich eingetragen.

24 Stunden (International = 1) oder 12 Stunden (US = 0)
HKEY_USERS \ .DEFAULT \ Control Panel \ International \ iTime
HKEY_CURRENT_USER \ Control Panel \ International \ iTime

US-Zusatz (AM/PM) vor (1) oder nach (0) der Zeit
HKEY_USERS \ .DEFAULT \ Control Panel \ International \ iTimePrefix
HKEY_CURRENT_USER \ Control Panel \ International \ iTimePrefix

Führende Null bei Stunden<10 Ja (1) oder Nein (0)
HKEY_USERS \ .DEFAULT \ Control Panel \ International \ iTLZero
HKEY_CURRENT_USER \ Control Panel \ International \ iTLZero

Trennzeichen für die Zeit: International : Doppelpunkt
HKEY_USERS \ .DEFAULT \ Control Panel \ International \ sTime
HKEY_CURRENT_USER \ Control Panel \ International \ sTime

Zeit-Format: International HH:mm:ss
HKEY_USERS \ .DEFAULT \ Control Panel \ International \ sTimeFormat
HKEY_CURRENT_USER \ Control Panel \ International \ sTimeFormat

Synchronisation

Liste bekannter NTP-Server:
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ DateTime \ Servers
Ausgewählter NTP-Server
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ W32Time \ Parameters \ NtpServer
Häufigkeit und andere Details der Synchronisation
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ W32Time \ Config

Details zur Zeit-Synchronisation mit NTP

Zeitzone(n)

Liste der bekannten Zeitzonen:
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones
(Die Liste kann leider mit ActiveX/WSH nicht angezeigt werden)
Aktuell ausgewählte Zeitzone (Zahlenwerte in Minuten relativ zur Weltzeit UTC)
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ TimeZoneInformation

Details dazu im Kapitel Windows @ Zeitzonen auf dieser Seite.

Nachhilfe

Es kann vorkommen, dass eine manuell eingestellte Zeitzone bei jedem System-Start zurückgesetzt wird. Für diesen Fall kann man einen Trick verwenden, der das Problem nicht beseitigt, aber kompensiert. - Anwendung auf eigenes Risiko !

Melden sie sich als Administrator an, starten sie regedit.exe und stellen sie die Daten so ein wie gewünscht.

Exportieren sie die richtig eingestellten Daten: Menü Datei | Exportieren. Wählen sie einen beliebigen Pfad, den Typ *.reg und den Export-Bereich 'Ausgewählte Teilstruktur'
Kontrollieren sie die erzeugte Datei mit einem Text-Editor.

Test an der Konsole: Schließen sie regedit.exe, starten sie eine Konsole cmd.exe und geben sie die Anweisung ein:
C:\> regedit C:\test.reg
(Ändern sie den Pfad zur reg-Datei nach Bedarf)
Quittieren sie die Warnung und kontrollieren sie mit regedit.exe, ob die gewünschten Daten richtig eingetragen wurden.

Stille Ausführung: Es ist wichtig, dass der Registry-Editor geschlossen wurde und nicht läuft !
Versuchen sie diese Konsolen-Anweisung:
C:\> regedit /s C:\test.reg
An Stelle des Schalters /s soll auch /q funktionieren (?). Die Daten sollten diesmal ohne Warn-Fenster korrekt eingetragen werden.

Automatisierung: Starten sie den Scheduler (Systemsteuerung | Geplante Tasks) und legen sie einen neuen Task an, welcher die soeben getestete 'Stille Ausführung' nach jedem Systemstart anordnet. Einige Hinweise:
Ausführen: regedit /s C:\test.reg
Ausführen in: C:\
Ausführen als: Administrator
Aktiviert: markiert
Task ausführen: Bei Anmeldung (bevorzugt, testen), ansonsten Beim Systemstart.
Task beenden nach 0 Stunden 1 Minuten

Test: Bei Systemstart /Anmeldung sollte die Arbeit 'Still' (ohne Warnfenster) korrekt ausgeführt werden.

Uptime

Hardware-Uhr

Jeder moderne PC enthält einen Hardware-Baustein, der eine PC-lesbare Uhr betreibt. Es handelt sich um einen quarz-stabilisierten Oszillator und angeschlossenen Zähler, welcher von einer eigenen Batterie oder Akku versorgt wird und auch im abgeschalteten PC weiterläuft.

Beim System-Start wird die PC-Zeit von der Uhr gelesen und danach hauptsächlich von der Software des Betriebssystems weiter verwaltet.
Die ersten PC enthielten allerdings noch keine Uhr: Es war notwendig und selbstverständlich, nach dem PC-Start das aktuelle Datum und die Zeit an der Konsole einzugeben.

Interrupt

PC-intern wird die Zeit-Verwaltung durch Interrupts gesteuert. Ein Interrupt ist ein Signal (Interrupt Request, IRQ) auf einer der (Hardware)-Interrupt-Leitungen des Prozessors.

Als Reaktion unterbricht der Prozessor die laufendee Arbeit und startet ein Programm, den für die jeweilige Leitung zuständigen Interrupt-Handler.

Zur Verwaltung der laufenden Zeit wird durch einen Hardware-Baustein in regelmäßigen Intervallen ein Inerrupt ausgelöst.

Das Interrupt-Handler Programm (Interrupt Service Routine, ISR) speichert (PUSH) zunächst den aktuellen Zustand des Prozessors (den Inhalt der Register) auf dem Stack.

Danach werden alle Arbeiten ausgeführt, welche zur Zeit-Verwaltung dienen.
Dazu wird z.B. kontrolliert, ob die Wartezeit (Timeout) für einen wartenden bzw. zu startenden Prozess abgelaufen ist.
Je nach Situation kann die Arbeit des Interrupt Handlers unterschiedlich lang dauern.
Während dieser Zeit wird normalerweise kein weiterer Interrupt der betreffenden Leitung angenommen.

Zuletzt regeneriert der Handler den Zustand des Prozessors, d.h. er ladet alle Register mit den am Stack gespeicherten Daten (POP).

Danach setzt der Prozessor seine unterbrochene Arbeit fort.

Der reale Vorgang an einem modernen Multiprozesor-System läuft zwar komplizierter ab, folgt jedoch dem gleichen Prinzip.
In der Praxis erfüllen viele Interrupt Handler mehrere unterschiedliche Aufgaben. Sie enthalten daher anfangs mehrere bedingte Verzweigungen: Je nach dem Ergebnis verschiedener Tests (typisch: Register-Inhalt) wird zu den jeweiligen Programmen verzweigt.

Die meisten Systeme verwenden den BIOS-Interrupt INT08 und nachfolgend Betriebssystem-Interrupts, z.B. INT1A (get/set system time, alarm, ...), INT1C (system timer tick), INT4A (user alarm handler)...

Die Programmierung von Interrupt Handler Programmen erfordert sehr fortgeschrittene Kenntnisse. Man verwendet normalerweise die Programmiersprachen C/C++ oder Assembler. Programme auf dieser Ebene sind nur selten portabel, d.h. meist spezifisch für das jeweilige Betriebssystem, manchmal auch für die Hardware.

Jiffy

Der Interrupt-Handler führt an jedem PC-System eine Zähler-Variable, die bei jedem Aufruf des Handlers erhöht wird. Der Zähler wird bei System-Start auf =0 gesetzt. Die Zeitspanne zwischen 2 aufeinander folgenden Timer-Interrupts wird Jiffy genannt, die lauifende Anzahl Ticks.
Die Dauer eines Jiffy ist von Hardware und System abhängig, auf Windows-Systemen meist 10ms.

Der Begriff 'Jiffy' ist je nach Arbeitsgebiet mehrdeutig:
In der Elektronik bezeichnet man damit manchmal die Periodenzeit von Wechselstrom (1/50s, in den USA 1/60s).
In Physik und Chemie bezeichnet man damit die Zeit, die Licht im Vakuum benötigt, um (verschiedene) sehr kurze Distanzen zurückzulegen, z.B. den Durchmesser eines Nukleons (Atomkern-Teilchens).

Uptime

Der aktuelle Stand des Jiffy-Counters entspricht der seit dem System-Start verganfgenen Zeit = Uptime
Je nach System gibt es verschiedene Methoden zur Anzeige der Uptime:

Mit dieser Anweisung (ab Windows 2k) erhalten sie eine Tabelle:
C:\> net statistics server
Aus der Angabe 'Statistik seit...' kann man den Start-Zeitpunkt des Systems entnehmen.

Microsoft bietet das 45kB kleine Konsolen-Programm uptime.exe, welches die Uptime für den aktuellen oder für einen (im Netzwerk) entfernten PC als Text ausgibt. Mit Option /s erhält man die 'forensischen' Daten der bisherigen Betriebszeiten.

Ab Windows XP erhalten sie mit dieser Anweisung einen aufbereiteten Text der Uptime (alle Daten, nur Uptime):
C:\> systeminfo
C:\> systeminfo | find "Systembetriebszeit"
Die Daten sind auch durch Lesen der Registry-Datenbank zugänglich, z.B.:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib

Ab Windows 7 gibt der Taskmanager | Leistung die Uptime an.


XHTML CSS