j'ai un problème sur un script que je n'ai pas écrit. le but de ce script est de savoir depuis combien de temps est démarrée la machine de l'utilisateur. Si elle est démarrée depuis plus de 5 jours, je lui impose un redémarrage (pour des raisons particulières).
Ce script fonctionne très bien sur Windows 7 Pro, or je migre petit à petit mes PC sous Windows 10 ; sur cet OS le script réagit anormalement.
Aujourd'hui par exemple j'ai démarré mon PC, et quelques secondes après le script m'a affiché que mon PC etait démarré depuis plus de 6 jours -> donc redémarrage.
je ne comprends pas bien ce comportement.
Merci à vous.
Code : Tout sélectionner
;FONCTION DEMARRE DEPUIS ...
Func _ComputerGetOSs()
Local $colItems, $objWMIService, $objItem, $i = 1
Local $aOSInfo[1]
$objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
If(Not(IsObj($objWMIService))) Then Return $aOSInfo
$colItems = $objWMIService.ExecQuery("SELECT Name, BuildNumber, LastBootUpTime, SerialNumber FROM Win32_OperatingSystem", "WQL", 0x10 + 0x20)
If IsObj($colItems) Then
For $objItem In $colItems
ReDim $aOSInfo[UBound($aOSInfo) + 1]
$aOSInfo[$i] = __StringToDate($objItem.LastBootUpTime)
$i += 1
Next
$aOSInfo[0] = UBound($aOSInfo) - 1
If $aOSInfo[0] < 1 Then
SetError(1, 1, 0)
EndIf
Else
SetError(1, 2, 0)
EndIf
Return $aOSInfo
EndFunc ;_ComputerGetOSs
Func __StringToDate($dtmDate)
Return (StringMid($dtmDate, 5, 2) & "/" & _
StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
& " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
EndFunc
Func InverserMoisJour($Texte)
Return StringMid($Texte, 4, 2) & "/" & StringMid($Texte, 1, 2) & StringTrimLeft($Texte, 5)
EndFunc
Func TimeGetLongFormatBySec($Sec)
Local $Retour = ""
Local $Temp
Local $Compare = 60*60*24
If($Sec > $Compare Or $Retour <> "") Then
$Temp = Floor($Sec/($Compare))
$Retour &= $Temp & " jour"
; SI PC demarré depuis plus de 3 jours alors popup redemarrage impératif.
if $Temp >= 5 Then
MsgBox(16,"ATTENTION !!!","Votre ordinateur n'a pas été redémarré depuis plus de "&$Temp&" jours." & @CRLF _
& " VOUS DEVEZ IMPERATIVEMENT LE REDEMARRER" &@CRLF & @CRLF _
&"Veuillez fermer vos travaux en cours et cliquez sur ""OK""")
;Shutdown(6)
EndIf
If($Temp > 1) Then
$Retour &= "s"
EndIf
$Retour &= " "
$Sec -= $Temp*$Compare
EndIf
$Compare = 60*60
If($Sec > $Compare Or $Retour <> "") Then
$Temp = Floor($Sec/($Compare))
$Retour &= $Temp & " heure"
If($Temp > 1) Then
$Retour &= "s"
EndIf
$Retour &= " "
$Sec -= $Temp*$Compare
EndIf
$Compare = 60
If($Sec > $Compare Or $Retour <> "") Then
$Temp = Floor($Sec/($Compare))
$Retour &= $Temp & " minute"
If($Temp > 1) Then
$Retour &= "s"
EndIf
$Retour &= " "
$Sec -= $Temp*$Compare
EndIf
$Compare = 1
;~ If($Sec > $Compare Or $Retour <> "") Then
;~ $Temp = Floor($Sec/($Compare))
;~ $Retour &= $Temp & " seconde"
;~ If($Temp > 1) Then
;~ $Retour &= "s"
;~ EndIf
;~ $Retour &= " "
;~ $Sec -= $Temp*$Compare
;~ EndIf
Return $Retour
EndFunc
Func GetSecByStringDate($time)
Return Number(StringMid($time, 7, 4))*31536000 + _
Number(StringLeft($time, 2))*86400 + _
Number(StringMid($time, 4, 2))*2678400 + _
Number(StringMid($time, 12, 2))*3600 + _
Number(StringMid($time, 15, 2))*60 + _
Number(StringRight($time, 2))
EndFunc