Comment puis-je déterminer l'heure du système sur un ordinateur ?
S'il vous plaît Monsieur Script...
Bienvenue dans cette section TechNet, dans laquelle le Monsieur Script de Microsoft répond aux questions récurrentes sur les scripts d'administration système.
Question du jour : comment puis-je déterminer l'heure du système sur un ordinateur ?
Comment puis-je déterminer l'heure du système sur un ordinateur ?Comment puis-je déterminer l'heure du système sur un ordinateur ?
S'il vous plaît Monsieur Script... Existe-t-il un moyen d'obtenir l'heure du système sur un ordinateur distant ?
-- JJ
Bonjour JJ. Il existe au moins deux moyens d'y parvenir, tous deux à l'aide de WMI. Si vous exécutez Windows XP ou Windows Server 2003, vous pouvez utiliser la classe WMI Win32_LocalTime. Comme vous pouvez le constater, il est relativement simple d'obtenir l'heure du système : il vous suffit de vous connecter à l'ordinateur distant, d'interroger la classe Win32_LocalTime et d'envoyer un écho des valeurs souhaitées. En d'autres termes :
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_LocalTime")
For Each objItem in colItems
Wscript.Echo "Month: " & objItem.Month
Wscript.Echo "Day: " & objItem.Day
Wscript.Echo "Year: " & objItem.Year
Wscript.Echo "Hour: " & objItem.Hour
Wscript.Echo "Minute: " & objItem.Minute
Wscript.Echo "Second: " & objItem.Second
Next
Si vous voulez vous amuser un peu, vous pouvez combiner toutes ces valeurs isolées au sein d'une chaîne date-heure standard qui ressemblerait à ceci : 1/26/2005 8:47:04 AM. Voici un script qui exécute justement cette tâche :
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_LocalTime")
For Each objItem in colItems
intMonth = objItem.Month
intDay = objItem.Day
intYear = objItem.Year
dtmDate = intMonth & "/" & intDay & "/" & intYear
intHour = objItem.Hour
If intHour < 12 Then
strAMPM = "AM"
Else
intHour = intHour - 12
strAMPM = "PM"
End If
intMinutes = objItem.Minute
If intMinutes < 10 Then
intMinutes = "0" & intMinutes
End If
intSeconds = objItem.Second
If intSeconds < 10 Then
intSeconds = "0" & intSeconds
End If
dtmTime = intHour & ":" & intMinutes & ":" & intSeconds & " " & strAMPM
Wscript.Echo dtmDate & " " & dtmTime
Next
Nous n'allons pas expliquer chaque ligne de code de ce script, mais pour la plupart d'entre elles, nous ne faisons que combiner des valeurs. En réalité, nous n'effectuons que deux opérations, un petit peu complexes. Tout d'abord, nous vérifions l'heure pour savoir si elle est inférieure à 12. Si oui, nous ajoutons AM à la fin de la chaîne ; dans le cas contraire, nous ajoutons PM. Et oui, vous l'avez bien compris, l'heure est renvoyée au format 24 heures ; ainsi, 3:00 de l'après-midi est renvoyé sous la forme 15:00. C'est pourquoi, lorsque nous vérifions l'heure, nous soustrayons 12 si elle est supérieure à 12. De cette façon, 15:00 devient 3:00 PM.
En ce qui concerne les minutes et les secondes, nous vérifions si la valeur renvoyée est inférieure à 10. Pourquoi ? Bien, imaginons que nous avons 8 heures, 6 minutes et 5 secondes. Si nous combinons ces valeurs telles quelles, nous obtiendrons l'heure sous la forme 8:6:5. Cela ne ressemble pas vraiment à un format d'heure, n'est-ce pas ? Par conséquent, si les minutes ou les secondes sont inférieures à 10, nous les faisons précéder d'un zéro. En procédant ainsi, nous combinons 8, 06 et 05 pour obtenir le format d'heure suivant : 08:06:05. Le résultat est bien meilleur n'est-ce pas ?
Bien sûr, cela suffit si vous utilisez Windows XP ou Windows Server 2003, mais qu'en est-il des utilisateurs de Windows 2000 ? D'accord, ils peuvent toujours obtenir cette même information, sauf que la procédure ne sera pas aussi simple.
Comme nous l'avons souligné plus haut, la classe Win32_LocalTime n'existe pas dans Windows 2000. Cependant, vous pouvez toujours obtenir l'heure du système en interrogant la classe Win32_OperatingSystem et en vérifiant la valeur de la propriété LocalDateTime. Le seul problème que pose cette approche, c'est que la date et l'heure sont renvoyées au format UTC (Universal Time Coordinate). Par conséquent, l'heure et la date obtenues ressemblent à l'exemple suivant : 20050127080605.000000+480. Côté lisibilité, ce n'est pas l'idéal.
Nous n'allons pas entrer dans les détails du format UTC. Si vous souhaitez obtenir davantage d'informations, consultez cette section du Microsoft Windows 2000 Scripting Guide ( ). Nous allons toutefois vous présenter un script qui extrait la valeur de la propriété LocalDateTime et la convertit dans un format légèrement plus lisible :
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objItem in colItems
dtmLocalTime = objItem.LocalDateTime
dtmMonth = Mid(dtmLocalTime, 5, 2)
dtmDay = Mid(dtmLocalTime, 7, 2)
dtmYear = Left(dtmLocalTime, 4)
dtmHour = Mid(dtmLocalTime, 9, 2)
dtmMinutes = Mid(dtmLocalTime, 11, 2)
dtmSeconds = Mid(dtmLocalTime, 13, 2)
Next
dtmNewDate = dtmMonth & "/" & dtmDay & "/" & dtmYear
dtmNewTime = dtmHour & ":" & dtmMinutes & ":" & dtmSeconds
Wscript.Echo dtmNewDate & " " & dtmNewTime
La question du format n'a pas été traitée dans ce script. Par exemple, nous ne convertissons pas 15:00 en 3:00, ni n'indiquons s'il s'agit du matin ou de l'après-midi (AM ou PM). Mais vous pouvez aborder cet aspect vous-même en suivant la même approche que celle adoptée pour la classe Win32_LocalTime.
Pour en savoir plus
Consultez les archives de S'il vous plaît Monsieur Script...