PDA

View Full Version : Batch per impostare ora PC in rete


elbittos7
14-10-2019, 09:45
Salve a tutti,
non so se questa è la sezione giusta, questo è il mio primo post.
Dovrei creare uno script che mi permetta di settare orari diversi, per gestire un delay del satelite, manualmente a dei pc nella stessa rete.

Esempio
PC 1 - 20.00
PC 2 -20.08

Kaya
14-10-2019, 10:19
Il comando che cerchi è "net time"
https://docs.microsoft.com/it-it/windows-server/networking/windows-time-service/windows-time-service-tools-and-settings

elbittos7
14-10-2019, 10:35
Grazie, della risposta. Gli do un'occhiata.

elbittos7
14-10-2019, 10:43
HO visto, ma non riesco a trovare la sintassi giusta.
Mi pare di aver capito che con questo comando sincronizzo il CLIENT con un server.
Io vorrei passargli manualmente l'orario in modo da calcolare e mantere costante lo scarto.

Grazie

Kaya
14-10-2019, 10:52
date 14-10-2019
time 12:00:00,00

Ovviamente devi stoppare e disabilitare il servizio Windows time altrimenti ogni tot fa il recheck

bandit400
14-10-2019, 11:44
Il comando da utilizzare, eseguito come Amministratore, è time:

https://i.ibb.co/ZVwRMPt/Immagine.png

Disabilita il servizio W32Time in accordo con quanto qui riportato: https://docs.microsoft.com/it-it/windows-server/networking/windows-time-service/windows-time-service-tools-and-settings

Come suggerito da @Kaya, nei minuti dopo la mezzanotte pari all'offset che devi realizzare, devi gestire anche la data con il comando date.

elbittos7
14-10-2019, 11:56
Io ho un SERVER 192.168.1.2 - ORAIO 12.00.00
voglio impostare da questo SERVER su un CLIENT 192.168.1.3 l'orario 12.08.00

Uso il comando NET TIME \\IP ADDRESS set\.. come gli passo manualmente orario?

Kaya
14-10-2019, 12:08
Non puoi farlo cosi.
Devi usare psexec
psexec \\ip_del_computer "net time 12:00:00"

Psexec fa parte dei pstools ( https://docs.microsoft.com/en-us/sysinternals/downloads/psexec )

Ovviamente devi avere anche le porte del firewall aperte (RPC di solito) sulle macchine e utenze con password (aka: non puoi NON avere una password impostata sul pc)

elbittos7
14-10-2019, 12:23
PsExec could not start net time 12:00:00 on 192.168.1.8:
La sintassi del nome del file, della directory o del volume non è corretta.

NO FIREWALL - NO PASSWORD

elbittos7
14-10-2019, 12:34
NON Aveveo letto bene. Infatti bisogna avere perfoza password su pc

elbittos7
14-10-2019, 14:41
PsExec.exe \\192.168.1.8 -u Administrator -p *****77 "net time 16:00"

Creato utente con PASSWORD - ma continua a darmi errore

Impossibile trovare il file specificato.

bandit400
14-10-2019, 14:48
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

elbittos7
14-10-2019, 15:14
Grazie a tutti,
ho avuto modo di documentarmi bene su PsExec.
Funziona benissimo con tutti i comandi. Net time non permette l'asseganzione diretta dell'orario, fa si che si connette a un server che rilascia orario.

bandit400
14-10-2019, 18:29
@elbittos7, nel mentre ho messo giù uno scriptino PHP che legge l'ora da un server NTP e formatta la data e l'orario per passarlo ai comandi date e time.
Questo scriptino, inoltre, può creare un offset tra l'orario del server NTP e quello che deve essere impostato sul PC sul quale gira.
Se lo installi nei due PC, li avrai tutte e due sincronizzati, uno con il server NTP più l'offset pari a zero e l'altro con il server NTP più l'offset che ti occorre.
Per funzionare deve girare con privilegi di amministratore.

<?php
/* IMPOSTAZIONI */
date_default_timezone_set('Europe/Rome');
$timeserver = "time.inrim.it";
$timestamp_offset = 480; //offset espresso in secondi - 8 minuti x 60 = 480 secondi
/* IMPOSTAZIONI */

/* Query a time server */
/* (C) 1999-09-29, Ralf D. Kloth (QRQ.software) <ralf at qrq.de> */
function query_time_server ($timeserver, $socket) {


$fp = fsockopen($timeserver,$socket,$err,$errstr,5);
# parameters: server, socket, error code, error text, timeout
if ($fp) {
fputs($fp,"\n");
$timevalue = fread($fp,49);
fclose($fp); # close the connection
}
else {
$timevalue = " ";
}

$ret = array();
$ret[] = $timevalue;
$ret[] = $err; # error code
$ret[] = $errstr; # error text
return($ret);
}
/* Query a time server */
/* (C) 1999-09-29, Ralf D. Kloth (QRQ.software) <ralf at qrq.de> */

$timercvd = query_time_server($timeserver,13);
if (!$timercvd[1]) {
$timevalue = $timercvd[0];
echo "From server: ............... ".$timevalue;
}
else {
exit();
}

$timestamp=strtotime($timevalue);

echo "Timestamp: ................. ".$timestamp."\n";

$timestamp_updated = $timestamp + $timestamp_offset;

echo "Timestamp + offset: ........ ".$timestamp_updated."\n";

$date_updated = date("d-m-Y H:i:s",$timestamp_updated);

echo "From Timestamp + offset: ... ".$date_updated."\n";

exec("date ".date("d-m-Y",$timestamp_updated));
exec("time ".date("H:i:s",$timestamp_updated));
?>

E questo è il risultato con un offset di 8 min. rispetto al server NTP...

https://i.ibb.co/RgscYXz/Immagine.png

P.S.: Per i puristi, non criticatemi! L'ho messo giù in meno di un'ora, mentre lavoravo su altro e tutto è, tranne che bello. Però funziona e lo condivido solo come spunto per una base migliore. :)

Kaya
15-10-2019, 07:19
PsExec.exe \\192.168.1.8 -u Administrator -p *****77 "net time 16:00"

Creato utente con PASSWORD - ma continua a darmi errore

Impossibile trovare il file specificato.

Scusami, mio errore!
il comando è solo TIME oppure DATE, togli net (e ricorda anche i secondi)

PsExec.exe \\192.168.1.8 -u Administrator -p *****77 "time 16:00:00,00"

@bandit400: perchè usare una forbice per un lavoro da cacciavite? ;-)

bandit400
15-10-2019, 09:21
@bandit400: perchè usare una forbice per un lavoro da cacciavite? ;-)

Perché è tutto automatico, perché ti mantiene l'offset al valore voluto, perché una volta fatto non lo tocchi più. E perché sono strano io. Lo riconosco... :D

elbittos7
16-10-2019, 08:55
Grazie a tutti. Perfetto ed utili entrambi i procedimenti.
:-)