Les bricolages de Heffgé |
Quoi de plus énervant qu'après avoir allumé son ordinateur portable et tenté d'accéder à un site internet on s'en voie refusé. La batterie est hors d'usage depuis longtemps et la pile nécessite d'être remplacée, la date et l'heure ont été perdues et, encore une fois, on a oublié de les rectifier.
L'ordinateur est trop ancien pour envisager un remplacement de la batterie et on repousse toujours à plus tard le changement de la pile. Le fait qu'il faille généralement démonter entièrement la bête pour y accéder n'incite pas à se précipiter. Tant qu'on ne débranche pas l'alimentation secteur tout va bien mais un portable c'est fait pour le promener d'un endroit à un autre sans fil à la patte.
Rappelons pour ceux qui l'auraient oublié que l'on n'est pas obligé de passer par les menus de configiration du BIOS ou de l'UEFI pour remettre la bonne date et la bonne heure. Ceci peut se faire depuis Windows en mode graphique ou aussi via une fenêtre console à l'aide des commandes date et time. Mais peut faire cette rectification par un simple clic ?
C'est ce que réalise le script batch ci-dessous.
Ce script exploite la fonction resync du service de temps de Windows. Elle permet d'interroger un serveur de temps distant et de changer la date et heure à partir des données transmises par ce serveur.
@echo off
:test
ping google.com -n 1 > nul
if %ERRORLEVEL% equ 0 goto Suite
timeout /t 2 > nul
goto test
:suite
w32tm /config /manualpeerlist:"time.windows.com" /syncfromflags:manual /reliable:yes /update > nul
net start W32Time > nul
w32tm /resync
pause
L'accès à internet peut ne pas encore avoir été rendu possible au moment où le script est exécuté. On a donc prévu une boucle lançant le programme ping sur Google toutes les 2 secondes jusqu'à ce que celui-ci s'exécute avec succès.
Ensuite on configure le service de temps de Windows, on le démarre pour le cas où il ne serait pas en démarrage automatique, et on lui demande de synchroniser l'ordinateur avec le serveur de temps spécifié (ici celui de Microsoft).
Le code ci-dessus devra être copié dans un fichie texte puis sauvgardé avec l'extension bat
Le service Temps Windows ne doit pas avoir été désactivé mais il peut n'être qu'en démarrage manuel. Pour vérifer ce point exécuter services.msc.
Par défaut la sychronisation avec le serveur de temps est refusée si l'écart est supérieur à 54000 secondes (15 heures) dans un sens ou dans l'autre. Cette valeur est en fait consignée dans le registre et peut donc être modifiée.
L'écart pouvant être positif ou négatif il y a un paramètre pour chacun des cas. Ici seul l'écart positif nous intéresse et il faudra seulement modifier la valeur de MaxNegPhaseCorrection dans la clé HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config.
On mettra la valeur hexadécimale conventionnelle FFFFFFFF signifiant que l'écart pourra être quelconque. La synchronisation sera possible même avec un écart de plusieurs années.
Exécuter regedit et aller à la clé HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config puis dans la partie droite modifier le paramètre MaxNegPhaseCorrection.
Ce script ne peut être exécuté qu'en mode administrateur. Pour le lancer de manière simple il suffit de créer un raccourci à l'endroit de son choix puis, dans ses propriétés, bouton Avancé, de cocher la case "Exécuter en tant qu'admininistrateur".
On peut automatiser l'exécution de ce script en créant une tâche planifiée qui s'exécutera au démarrage de l'ordinateur.
Pour créer un nouvelle tâche, lancer taskschd.msc. On pourra comme dans l'exemple ci-dessous créer un dossier "Perso" pour accueillir cette tâche.
Dans l'onglet "Général", Options de sécurité, choisir "Système" comme utilisateur et cocher la case "Exécuter avec les autorisations maximales".
Dans l'onglet "Déclencheurs" cliquer sur "Nouveau" puis dans la boîte de dialogue qui s'ouvre, "Au démarrage du système".
Et enfin dans l'onglet "Actions"cliquer sur "Nouveau" pour indiquer le nom du script précédé de son chemin d'accès.
Au lieu de créer une tâche programmable les détenteurs d'une licence de Windows de type professionnel peuvent utililser Gpedit afin de déclarer le script dans la statégie locale.