simonpeter
Goto Top

Per Batch Systemzeit auslesen und mit einer anderen vergleichen

Hallo Helfer und Helferinnen

Wäre dankbar um Tipps, wie ich dieses Problem lösen könnte:

Würde gerne Systemzeit von Server1 mit der von Server2 vergleichen und bei einer bestimmten Differenz eine Textdatei generieren lassen.

Vielen Dank für Eure Hilfe!

Grüsse aus der Schweiz

Simon

Content-Key: 128152

Url: https://administrator.de/contentid/128152

Printed on: April 23, 2024 at 07:04 o'clock

Mitglied: 60730
60730 Oct 28, 2009 at 15:32:16 (UTC)
Goto Top
Servus,

Bedenke ein Script, dass zuerst den einen und dann den anderen abfragt - hat eine Latenz dazwischen..

Das sollte zum testen reichen

net time \\server1 >c:\server1.txt
net time \\server2 >c:\server2.txt
for /f "tokens=7,9" %%i in ('find "\" c:\server1.txt') do echo %%i>c:\servertime1.log  
for /f "tokens=7,9" %%i in ('find "\" c:\server2.txt') do echo %%i>c:\servertime2.log  
fc c:\servertime1.log c:\servertime2.log && echo passt schon || echo uhrstimmtnicht >c:\serverzeitfehler.

Gruß


edit: das geschriebene gilt selbstverfreilich nur dann, wenn beide Server tatsächlich die gleichen Einstellungen haben!
Ist einer englisch, der anderr deutsch - mag das ergebniss auch dann ein false ergeben, wenn die Zeiten stimmen.


Im zweifel hab ich nen NTP, der den Servern immer die Uhr stellt.
Member: SimonPeter
SimonPeter Oct 28, 2009 at 16:44:53 (UTC)
Goto Top
Wie immer: Schneller geht's nicht. Vielen Dank!

Kann man noch eine Zeile einbauen, die die akzeptable Differenz für ein "passt schon" auf 5 Minuten setzt? Und die entsprechende Meldungsausgabe (passt oder eben passt nicht) in eine Textdatei?

Gruss
Simon
Mitglied: 60730
60730 Oct 28, 2009 at 17:24:09 (UTC)
Goto Top
face-wink

fümpf minuten - ich weiss ja- dass Ihr Schweizer nicht so schnell seid - aber seit Ihr nicht alle Uhrmacher im Nebenjob?

Wenn ich das zimmern würde - wäre es ein krampf am ende.
siehe unten...

Warum stellst du dir Uhrzeit nicht (wenn schon nicht immer) dann wenigstens dann - wenn Sie nicht stimmt?

Net time \\server\ /set /Yes

Gruß
Member: TsukiSan
TsukiSan Oct 28, 2009 at 18:07:48 (UTC)
Goto Top
Naja, man könnte doch den "Timer" nehmen, die Sekunden, die nach Mitternacht vergangen sind
in vbs z.Bsp.:
msgbox Timer

wäre das ein Ansatz?

Gruß
Tsuki
Mitglied: 60730
60730 Oct 28, 2009 at 22:52:32 (UTC)
Goto Top
Servus Tsuki,

viele Wege / Rom oder so face-wink

if not exist C:\script\zeitvergleich md C:\script\zeitvergleich
ping -n 1 server1 && net time \\server1>C:\script\zeitvergleich\server1.log
ping -n 1 server2 && net time \\server2>C:\script\zeitvergleich\server2.log
if not exist C:\script\zeitvergleich\server1.log if not exist C:\script\zeitvergleich\server2.log goto badboysdontcry

for /f "tokens=7,9" %%i in ('find "\" C:\script\zeitvergleich\server1.log') do echo %%i>C:\script\zeitvergleich\servertime1.log  
for /f "tokens=7,9" %%i in ('find "\" C:\script\zeitvergleich\server2.log') do echo %%i>C:\script\zeitvergleich\servertime2.log  
for /f "tokens=1,2 delims=:" %%i in (C:\script\zeitvergleich\servertime1.log) do set "s1=%%i%%j"  
for /f "tokens=1,2 delims=:" %%i in (C:\script\zeitvergleich\servertime2.log) do set "s2=%%i%%j"  
if %s1% equ %s2% goto ok
if %s1% gtr %s2% set /a diff=%s1%-%s2%
if %s1% lss %s2% set /a diff=%s2%-%s1%
if %diff% gtr 40 set s1 |findstr ".5." && set /a diff-=40  
if %diff% gtr 40 set s2 |findstr ".5." && set /a diff-=40  
if %diff% leq 5 goto ok

:notok
echo wer hat an der Uhr gedreht - ist es wirklich schon so spaet>C:\script\zeitvergleich\serverzeitfehler.txt
:ok
echo 	
pause
del C:\script\zeitvergleich\*.log

Für weitere Fehlerabfragen bist du selber *lach* zuständig und dass die ganze Choose ebbes krümmer geschrieben ist - ich.
u.a auch der, dass das Script um ~ 15.00 nicht genau ist.

Gruß
Member: TsukiSan
TsukiSan Oct 28, 2009 at 23:22:38 (UTC)
Goto Top
Hallo Timo,

jetzt habe ich dich schon wieder dazu verleitet, noch weitere Schleifen für heute zu "binden".
Das war gar nicht meine Absicht!
Aber vielleicht hilft es ja unserem Kollegen Simon!


Warten wir's mal ab face-smile

Gruß
Tsuki
Member: SimonPeter
SimonPeter Oct 29, 2009 at 09:27:36 (UTC)
Goto Top
Tja, was soll ich sagen: Es ist eine Freude in diesem Forum!

Ich habe in Timos Script folgenden Inhalt in den beiden "servertime1/2.log": % 1

Unterscheidet sich die Zeit, wird mir nach der Zeile "for /f "tokens=1,2 delims=:" %%i in (C:\serverzeit\servertime2.log) do set "s2=%%i%%j"" frech zurück gemeldet: "i" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Das "serverzeitfehler.txt" wird nicht angelegt

Wo liegt hier der Hund begraben?

Schweizer Uhrmacher mit 5 Minuten Verspätung

Simon
Mitglied: 60730
60730 Oct 29, 2009 at 09:33:43 (UTC)
Goto Top
Servus,

ich hab das auf deutschen Systemen probiert.

schau mal in beiden serverx.log - ob da "sinngemäß"
hh:mm
drin steht...

Gruß

edit: das ist die Ausgabe bei zwei englischen Servern:

Und bitte mach aus dem Pings jeweils ein
ping -n 1 server - denn mit den 3 Pings dazwischen - ist "zuviel" Latenz drin..
C:\script\zeitvergleich>if not exist C:\script\zeitvergleich\server1.log if not
exist C:\script\zeitvergleich\server2.log goto badboysdontcry

C:\script\zeitvergleich>for /F "tokens=7,9" %i in ('find "\" C:\script\zeitvergl  
eich\server1.log') do echo %i 1>C:\script\zeitvergleich\servertime1.log  

C:\script\zeitvergleich>echo 10:38 1>C:\script\zeitvergleich\servertime1.log

C:\script\zeitvergleich>for /F "tokens=7,9" %i in ('find "\" C:\script\zeitvergl  
eich\server2.log') do echo %i 1>C:\script\zeitvergleich\servertime2.log  

C:\script\zeitvergleich>echo 10:39 1>C:\script\zeitvergleich\servertime2.log

C:\script\zeitvergleich>for /F "tokens=1,2 delims=:" %i in (C:\script\zeitvergle  
ich\servertime1.log) do set "s1=%i%j"  

C:\script\zeitvergleich>set "s1=1038"  

C:\script\zeitvergleich>for /F "tokens=1,2 delims=:" %i in (C:\script\zeitvergle  
ich\servertime2.log) do set "s2=%i%j"  

C:\script\zeitvergleich>set "s2=1039"  

C:\script\zeitvergleich>if 1038 EQU 1039 goto ok

C:\script\zeitvergleich>if 1038 GTR 1039 set /a diff=1038-1039

C:\script\zeitvergleich>if 1038 LSS 1039 set /a diff=1039-1038

C:\script\zeitvergleich>if 1 GTR 40 set s1   | findstr ".5."   && set /a diff-=4  
0

C:\script\zeitvergleich>if 1 GTR 40 set s2   | findstr ".5."   && set /a diff-=4  
0

C:\script\zeitvergleich>if 1 LEQ 5 goto ok
Mitglied: 60730
60730 Oct 29, 2009 at 09:49:51 (UTC)
Goto Top
Poste doch auch mal deinen Inhalt von...
server1.log
Aktuelle Zeit auf \\xxxx ist 10/29/2009 10:46 AM.

Der Befehl wurde erfolgreich ausgefhrt.

server2.log
Aktuelle Zeit auf \\yyyyy ist 10/29/2009 10:52 AM.

Der Befehl wurde erfolgreich ausgefhrt.

servertime1.log
10:46
servertime2.log
10:52

Wobei die beiden "jetzt" - zur AM Zeit ein deutscher und ein englischer war.
Und ich ein paar Pings dazwischen laufen liess, um einen unterschied zu erzwingen, ohne die log files per hand zu verändern.
Member: SimonPeter
SimonPeter Oct 29, 2009 at 09:57:50 (UTC)
Goto Top
Sorry, mein Fehler. Hatte einen Abstand zwischen "%%" und "i". Dann klappt's natürlich nicht.

Könntest Du mir wohl noch die genaue Dauer dieser "40" deuten?

Script scheint zu funktionieren. Tiptop, vielen Dank!
Mitglied: 60730
60730 Oct 29, 2009 at 10:11:02 (UTC)
Goto Top
Könntest Du mir wohl noch die genaue Dauer dieser "40" deuten?

das ist eine Nacht und Nebeleingebung meinerseits

1203-1158 (wären ja genau deine 5 minuten) - aber die differenz ist 45.
45-40 wären 5

Und damit wenigstens einigermaßen sichergestellt ist, das eine 5 drin ist - wobei ich das auch genauer in den minuten hätte suchen können - muß nach dem check
if %diff% gtr 40
ein
set s1 |findstr ".5." &&
drin sein.

Wobei - wenn ich mir das konstrukt heute ansehe - würd ichs anders machen - ich sehs nur als proof of konzept - aber (nicht wirklich) einen Sinn - den ich brauchen könnte - und das mit dem Sinn für einen selber -ist auch ein Punkt für mich - um hier Probleme zu lösen.

Gruß
Member: TsukiSan
TsukiSan Oct 29, 2009 at 10:37:17 (UTC)
Goto Top
Hallo Timo, Hallo Simon,

da bin ich erst wieder.
Ich wollte doch aus Timo's Script folgendes machen heute morgen:
@Set "Server1=\\Server1"  
@Set "Server2=\\Server2"  
@For /F "tokens=2 delims=:" %%i in ('net time ^ %Server1%') do @Set "InfoA=%%i"   
@For /F "tokens=2 delims=:" %%i in ('net time ^ %Server2%') do @Set "InfoB=%%i"   
@IF /i %InfoA:~0,2% == %InfoB:~0,2% goto NOP
@IF /i %InfoA:~0,2% gtr %InfoB:~0,2% set /a diff=%InfoA:~0,2%-%InfoB:~0,2%
@IF /i %InfoA:~0,2% lss %InfoB:~0,2% set /a diff=%InfoB:~0,2%-%InfoA:~0,2%
@IF /i %diff% gtr 50 set /a diff=60-diff
@IF /i %diff% leq 5 goto NOP
Net Time %Server1% /SET /q
:NOP
pause
Leider war ich den ganzen Tag unterwegs.

Will das erst mal schnell posten und dann lese ich mir den Rest auch noch durch.
Ps.: Hatte wenig Zeit zum Testen. Sollte aber auf Windowsserven (bei Uhrzeitformat hh:mm) funktionieren. Ansonsten ist dies anzupassen.

Bis später. 's Telefon!

Gruß
Tsuki
Member: SimonPeter
SimonPeter Oct 29, 2009 at 10:51:30 (UTC)
Goto Top
Perfekt! Vielen herzlichen Dank. Funktioniert besser als eine schweizer Bank ;)

Gruss
Simon
Member: TsukiSan
TsukiSan Oct 29, 2009 at 10:51:40 (UTC)
Goto Top
So, jetzt konnte ich schnell mal über alles hinwegfliegen face-wink

@Timo,
wir hatten doch den Deal gestern Nacht, dass ich die Fehler wech mach.
Denke, ist mir gelungen.
Auch wenn ich vom VBS abgekommen bin und beim Batchen gelandet bin - wo ich eigentlich noch ein Greenhorn drin bin!
Aber du hast dich bestens an deine Abmachung gehalten face-wink

Nun mal wieder Ernst.
Ich habe meinen Script schnell mal auf zwei XP-Maschinen getestet.
Man muss schon Adminrechte auf beiden haben und die Urhzeitformate sollten stimmen, damit das Token funktionert. Sonst rechnen wir am Ende noch Äpfel mit Birnen zusammen und bekommen als Ergebnis Mischobst face-wink

@simon
was ist denn jetzt der Stand deiner Dinge in der Schweiz? Was machen die Uhren? face-wink

Gruß
TSuki
Member: TsukiSan
TsukiSan Oct 29, 2009 at 10:53:11 (UTC)
Goto Top
Na dann Glückwunsch!

Dann hätten wir's doch!

Viele Grüße in die Schweiz!

Tsuki
Member: SimonPeter
SimonPeter Nov 06, 2009 at 08:51:22 (UTC)
Goto Top
Hallo Timo

Dachte eigentlich, dass ich die "40" verstanden hätte. Leider ist dem nicht so... Schon bei einer Differenz von +/- 1Minute springt das Script zur Sprungmarke "notok". Lässt sich diese Abfrage eventuell noch etwas "verfeinern"?

Vielen Dank und Grüsse

Simon
Mitglied: 60730
60730 Nov 06, 2009 at 09:12:35 (UTC)
Goto Top
Servus,

"eigentlich" lief mein Script damals, als ich es geschrieben habe - aber Tsuki hat sich bedeutend mehr Mühe gegeben , das auch in Schönschrift neuzuzimmern.

Poste doch mal deinen Output - dann kann ich mir das gerne nochmal ansehen.

Gruß
Member: SimonPeter
SimonPeter Nov 06, 2009 at 10:33:55 (UTC)
Goto Top
Sali Timo

Das Script sieht, ein ganz klein Wenig erweitert, so aus:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ping -n 1 sXXXX1 && net time \\sXXXX1>C:\serverzeit\server1.log
ping -n 1 sXXXX2 && net time \\sXXXX2>C:\serverzeit\server2.log
Set /p ersteZeile1=<C:\serverzeit\server1.log
echo %ersteZeile1%>>C:\serverzeit\logdatei.txt
Set /p ersteZeile2=<C:\serverzeit\server2.log
echo %ersteZeile2%>>C:\serverzeit\logdatei.txt
for /f "tokens=7,9" %%i in ('find "\" C:\serverzeit\server1.log') do echo %%i>C:\serverzeit\servertime1.log
for /f "tokens=7,9" %%i in ('find "\" C:\serverzeit\server2.log') do echo %%i>C:\serverzeit\servertime2.log
for /f "tokens=1,2 delims=:" %%i in (C:\serverzeit\servertime1.log) do set "s1=%%i%%j"
for /f "tokens=1,2 delims=:" %%i in (C:\serverzeit\servertime2.log) do set "s2=%%i%%j"
if %s1% equ %s2% goto ok
if %s1% gtr %s2% set /a diff=%s1%-%s2%
if %s1% lss %s2% set /a diff=%s2%-%s1%
if %diff% gtr 40 set s1 |findstr ".5." && set /a diff-=40
if %diff% gtr 40 set s2 |findstr ".5." && set /a diff-=40
if %diff% leq 5 goto notok

:notok
echo Zeitdifferenz zwischen SXXXX1 und SXXXX2 ist groesser als 5 Minuten>C:\serverzeit\serverzeitfehler.txt

:ok
del C:\serverzeit\*.log

if exist C:\serverzeit\serverzeitfehler.txt goto blat
if not exist C:\serverzeit\serverzeitfehler.txt goto eof

:blat
blat.exe C:\serverzeit\serverzeitfehler.txt -to YYYY@YYYY.ch -subject "Zeitdifferenz zwischen SXXXX1 und SXXXX2" -server ZZZZ.ZZZ.ZZZ -q

del C:\serverzeit\serverzeitfehler.txt
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Ich lese also jeweils noch "server1.log" und "server2.log" aus und schreibe deren Inhalt in eine txt als Log. Bei "notok" wird eine weitere txt geschrieben, welche als Mail versendet wird.

Auf Grund des Logs (effektive Serverzeiten) sehe ich, dass eine Minute Differenz genügt damit das Mail versendet wird. Inhalt des Logs sieht dann so aus:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Aktuelle Zeit auf \\sXXXX1 ist 11/6/2009 10:01 AM.
Aktuelle Zeit auf \\sXXXX2 ist 11/6/2009 10:01 AM.
Aktuelle Zeit auf \\sXXXX1 ist 11/6/2009 10:10 AM. <-- hier wird also versendet
Aktuelle Zeit auf \\sXXXX2 ist 11/6/2009 10:11 AM.
Aktuelle Zeit auf \\sXXXX1 ist 11/6/2009 10:21 AM.
Aktuelle Zeit auf \\sXXXX2 ist 11/6/2009 10:21 AM.
Aktuelle Zeit auf \\sXXXX1 ist 11/6/2009 10:30 AM. <-- und hier
Aktuelle Zeit auf \\sXXXX2 ist 11/6/2009 10:31 AM.
Aktuelle Zeit auf \\sXXXX1 ist 11/6/2009 10:40 AM. <-- und hier ebenfalls
Aktuelle Zeit auf \\sXXXX2 ist 11/6/2009 10:41 AM.
Aktuelle Zeit auf \\sXXXX1 ist 11/6/2009 10:51 AM.
Aktuelle Zeit auf \\sXXXX2 ist 11/6/2009 10:51 AM.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Wäre dankbar für Lösungsvorschläge. Merci!

Gruess
Simon
Mitglied: 60730
60730 Nov 06, 2009 at 12:17:15 (UTC)
Goto Top
Servus,

schau dir mal "logisch" die Zeile 16 ff an - er "muß" bei deiner Logik immer bei notok vorbei, weil es der nächste Schritt ist...

ping -n 1 sXXXX1 && net time \\sXXXX1>C:\serverzeit\server1.log
ping -n 1 sXXXX2 && net time \\sXXXX2>C:\serverzeit\server2.log
Set /p ersteZeile1=<C:\serverzeit\server1.log
echo %ersteZeile1%>>C:\serverzeit\logdatei.txt
Set /p ersteZeile2=<C:\serverzeit\server2.log
echo %ersteZeile2%>>C:\serverzeit\logdatei.txt
for /f "tokens=7,9" %%i in ('find "\" C:\serverzeit\server1.log') do echo %%i>C:\serverzeit\servertime1.log  
for /f "tokens=7,9" %%i in ('find "\" C:\serverzeit\server2.log') do echo %%i>C:\serverzeit\servertime2.log  
for /f "tokens=1,2 delims=:" %%i in (C:\serverzeit\servertime1.log) do set "s1=%%i%%j"  
for /f "tokens=1,2 delims=:" %%i in (C:\serverzeit\servertime2.log) do set "s2=%%i%%j"  
if %s1% equ %s2% goto ok
if %s1% gtr %s2% set /a diff=%s1%-%s2%
if %s1% lss %s2% set /a diff=%s2%-%s1%
if %diff% gtr 40 set s1 |findstr ".5." && set /a diff-=40  
if %diff% gtr 40 set s2 |findstr ".5." && set /a diff-=40  
if %diff% leq 5 goto notok
rem Problem ist hier
goto ok

:notok
echo Zeitdifferenz zwischen SXXXX1 und SXXXX2 ist %diff% Minuten>C:\serverzeit\serverzeitfehler.txt

:ok
del C:\serverzeit\*.log

if exist C:\serverzeit\serverzeitfehler.txt goto blat
if not exist C:\serverzeit\serverzeitfehler.txt goto eof

:blat
blat.exe C:\serverzeit\serverzeitfehler.txt -to YYYY@YYYY.ch -subject "Zeitdifferenz zwischen SXXXX1 und SXXXX2" -server ZZZZ.ZZZ.ZZZ -q  

del C:\serverzeit\serverzeitfehler.txt
:end

oder so:

if %diff% leq 5 echo Zeitdifferenz zwischen SXXXX1 und SXXXX2 ist %diff% Minuten>C:\serverzeit\serverzeitfehler.txt
if exist C:\serverzeit\serverzeitfehler.txt blat.exe C:\serverzeit\serverzeitfehler.txt -to YYYY@YYYY.ch -subject "Zeitdifferenz zwischen SXXXX1 und SXXXX2" -server ZZZZ.ZZZ.ZZZ -q  

so passt dann alles, denn nur wenn C:\serverzeit\serverzeitfehler.txt vorhanden ist - Blattet er... dann halt den Rest "umstellen"

Egal wie - das passt alles.

Gruß
Member: SimonPeter
SimonPeter Nov 06, 2009 at 12:53:23 (UTC)
Goto Top
Hallo Timo

Danke schön. Allerdings löst das das Problem nicht.

Wenn keine Differenz, springt er bei Zeile 11 nach "ok"

Mir ist jetzt aber Zeile 16 aufgefallen: Müsste da nicht ein "gtr" statt "leq" stehen? Ich möchte ja, dass er meldet, wenn die Differenz grösser als 5 Minuten ist.

Was meinst Du?

Gruss
Simon

PS Deine zweite Variante ist natürlich wesentlich schlanker als mein klobiges Konstrukt... face-smile
Mitglied: 60730
60730 Nov 06, 2009 at 13:25:42 (UTC)
Goto Top
Zitat von @SimonPeter:
Hallo Timo

Danke schön. Allerdings löst das das Problem nicht.

Wenn keine Differenz, springt er bei Zeile 11 nach "ok"
jupp - aber es sollte ja auch 5 minuten als noch akzeptabel durchgehen...

Mir ist jetzt aber Zeile 16 aufgefallen: Müsste da nicht ein "gtr" statt "leq" stehen?
Im Eifer des Gefechts - untergegangen gtr
..Ich möchte ja, dass er meldet, wenn die Differenz grösser als 5 Minuten ist.

Was meinst Du?

Das ich grade an ner Firmeninternen Baustelle grabe...

Gruss
Simon

PS Deine zweite Variante ist natürlich wesentlich schlanker als mein klobiges Konstrukt... face-smile

Gruß
Member: SimonPeter
SimonPeter Nov 06, 2009 at 14:03:39 (UTC)
Goto Top
Tadellos. Vielen Dank nochmal und schönes Wochenende.

Gruss
Simon