Existe-t-il un moyen de voir combien de temps il reste avant un arrêt planifié dans Windows 7?
Par arrêt planifié, j'entends un arrêt (ou redémarrage) planifié à l'aide de l' shutdown.exe
application en ligne de commande , par exemple:
shutdown /t 600 /s
Cela afficherait une boîte de message indiquant qu'il y a 10 minutes avant l'arrêt, et l'heure réelle de l'arrêt du système.
Tout temps supérieur à 600
quelques secondes utilise à la place un message ballon.
Je me souviens vaguement que XP avait fourni un moniteur de progression de l'interface graphique, avec un compte à rebours.
Comment ont-ils fonctionné? Le temps d'arrêt restant ou le temps planifié doivent être stockés quelque part, comment puis-je y accéder?
Ma préférence est une méthode via la ligne de commande (c'est-à-dire non GUI). Plus important encore, est-ce réalisable sous Windows, c'est-à-dire sans aucun programme tiers?
Si cela n'est pas réalisable avec les utilitaires Windows standard (et je suis à la limite du territoire Stack Overflow ici), existe-t-il une fonction Windows API (ou .NET, qui pourrait même être utilisée dans PowerShell!)? L'un ou l'autre serait préféré à un programme tiers aléatoire.
/c <time>
).Réponses:
La question était intéressante, j'ai donc écrit un lot qui peut faire du travail pour vous.
Fondamentalement, c'est le compte à rebours, je n'ai pas inclus de
shutdown
commande mais je l'ai laissé comme devoir. Les calculs ne sont pas précis, cela ne se soucie pas des années bissextiles, de la durée du mois, ... c'est principalement pour la lisibilité car je voulais le garder facile à apprendre.Il y a actuellement deux fichiers qui travaillent ensemble, l'un démarre le minuteur et l'autre, lorsqu'il est appelé, indique le temps écoulé depuis le démarrage du minuteur. Ces deux fichiers peuvent être combinés assez facilement en un seul script cmd, de cette façon, vous pouvez également rendre certaines lignes réutilisables ( comme les méthodes définies ).
D'accord, jetons un œil aux scripts,
Voici
StartTimer.cmd
:En ligne commençant par
FOR /F "skip=1 ...
:1. Demandez
wmic
l'heure et la date actuelles.2. Ignorez la première ligne de sortie, qui est les en-têtes, de
skip=1
3. Lisez les valeurs en utilisant la
tokens=1-6
signification%%a-%%f
séparée par Spaceor
TAB.4. valeurs magasin aux variables
%DateY%
, ...%TimeH%
,%TimeM%
...Après cela, au début de la ligne,
SET /A EPOCH=...
nous utilisons une expression qui calcule les secondes écoulées1.1.1970
( c'est une approximation simple, pas un temps Unix réel. Voir Google si vous avez besoin de précision ).Puis à la dernière ligne
ECHO %EPOCH% > ...
écrit le temps calculé dans le fichier appelé "Timer.start.state
".Et ici
GetTimerValue.cmd
:Ici, le flux de code n'est pas linéaire de haut en bas. D'abord, nous
GOTO CHECKFILE
étiquetons donc les commandes d'exécution commencent vraiment à la ligne qui dit:CHECKFILE
. Beaucoup de choses ici sont les mêmes que pourStartTimer.cmd
donc j'explique seulement les lignes nouvelles ou modifiées.Nous vérifions d'abord si le fichier d'état
Timer.start.state
existe, sinon terminons avec un message. Si la minuterie a démarré et que les fichiers existent, alors nous continuons et faisons quelques calculs:1. Aller à l'
:TIMEOUT
endroit où nous produisons les secondes écoulées. Vous pouvez choisir une meilleure étiquette pour cela ...2.
SET /P %Timer% ...
lit l'heure de début du fichier et attribue une valeur à la%Timer%
variable.3.
SET /A Elapsed ...
calcule les secondes entre l'heure de début et maintenant.4.
ECHO "Seconds ...
renvoie la valeur calculée (secondes depuis le démarrage de la minuterie.Comment obtenir le temps restant:
Vous pouvez soustraire
%Elapsed%
de%MaxTime%
:OK, expliqué assez. Voici le script complet
Timer.cmd
:À ce stade, j'ai oublié tout ce qui a déjà été dit. Ce fichier de commandes fonctionne ici de manière autonome, il n'y a donc pas de fichier séparé
StartTimer.cmd
ouGetTimerValue.cmd
uniquement celui-ciTimer.cmd
. Fondamentalement, il est toujours le même, mais le flux de code est différent et l'utilisation est également complètement différente. Cependant, cela n'enregistre pas l'état dans le fichier, vous ne pouvez donc plus obtenir la valeur de la minuterie après la déconnexion / le redémarrage, si vous avez besoin de cet exemple d'utilisation ci-dessus pour enregistrer / lire l'état dans / depuis le fichier.Utilisation / aide pour
Timer.cmd
est imprimé lorsqu'il est exécuté sans arguments. Je n'ai pas entièrement testé cela et il peut y avoir des fautes de frappe, etc., les arguments ne sont pas vérifiés à toute épreuve.Intégration avec
shutdown
ou toute autre commande:Fichier
poweroff.cmd
:Utilisation:
poweroff <wait_seconds>
pour démarrer l'arrêt programmé etTimer get
pour obtenir le temps écoulé / restant.la source
StartTimer.cmd
doivent être explicitement appelées. J'avais écrit un petit programme pour résoudre mon problème, que je publierai lorsque je reviendrai sur mon ordinateur.shutdown.exe
, qui s'appelaitshutdown_original.exe
. Il vérifierait le/t
drapeau et s'il existait, créerait un fichier avec les heures de début et de fin enregistrées. Lors de la récupération des heures (/retrieve
indicateur), il vérifierait le journal des événements pour voir si un démarrage ou un abandon avait été effectué depuis le démarrage de la minuterie. Je ne sais pas comment cela aurait géré les hibernations. Je ne vais pas publier le code ou le programme: c'est un bug bug. Et pour que le programme fonctionne, je devais beaucoup jouer avec les paramètres de sécurité, que je ne voulais pas promouvoir.shutdown.exe
appel et à enregistrer les heures dans un fichier, ce que vous avez fait et pourquoi j'accepte cela.