Question
Comportement fantaisiste de start-sleep
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 58
- Remerciements reçus 0
il y a 8 ans 2 mois #25055
par Gabriel
Comportement fantaisiste de start-sleep a été créé par Gabriel
Bonjour à tous,
Dans mon script qui gère des tâches de sauvegarde, j'utilise une boucle d'attente, qui elle-même utilise start-sleep.
[code:1]##### Boucle d'attente ###################
$watch=[System.Diagnostics.Stopwatch]::«»startNew()
$DateStart=$watch.Elapsed.TotalSeconds
$monlog=\"C:\Users\Josette\Documents\NAS\Monlog.txt\"
$Message=\"################################## \" >>$monlog
$Message=\"Début de boucle. Départ : \"+ $DateStart >>$monlog
$DateFin=$DateStart+5400
$Message=\"DateFin=$DateFin\">>$monlog
Do{
Start-Sleep -s 300
$DateCour=$watch.Elapsed.TotalSeconds
$message=\"Boucle en cours $DateCour/$(get-date)\" >>$monlog
}while($DateCour -le $DateFin)
$Message=\"Délai écoulé, $(get-date)\" >>$monlog[/code:1]
J'ai choisi une durée d'attente de 5mn pour déboguer le mécanisme. Chaque fois qu'une tranche se termine normalement Powershell envoie dans le log l'état de stopwatch et la date-heure. Le délai total est de 5400 secondes soit 1,5 heures.
Or dans le log on constate des choses bizarres. Des fois, après 1800 secondes, le \"sleep\" ne se finit pas avant 12000 ou 13000 secondes, ce qui n'est pas conforme à ce que je cherche. Exemple :
[code:1]
Attente. Départ : 0.0027393
DateFin=5400.0027393
Boucle en cours 300.1321417/02/24/2018 19:56:59
Boucle en cours 600.165338/02/24/2018 20:01:59
Boucle en cours 900.2549121/02/24/2018 20:06:59
Boucle en cours 1200.2740606/02/24/2018 20:11:59
Boucle en cours 1500.3401494/02/24/2018 20:16:59
Boucle en cours 1800.3531683/02/24/2018 20:21:59
Boucle en cours 12166.0031427/02/24/2018 23:14:45
Délai écoulé : 02/24/2018 23:14:45[/code:1]
Des fois le processus se déroule plus normalement mais il manque une ou deux tranches. Exemple
[code:1]
Début de boucle. Départ : 4.87E-05
DateFin=5400.0000487
Boucle en cours 300.1366048/02/26/2018 09:08:44
Boucle en cours 600.1640561/02/26/2018 09:13:44
Boucle en cours 900.1881993/02/26/2018 09:18:44
Boucle en cours 1200.2042255/02/26/2018 09:23:45
Boucle en cours 1500.2618817/02/26/2018 09:28:45
Boucle en cours 1800.2912738/02/26/2018 09:33:45
Boucle en cours 2977.1441055/02/26/2018 09:53:21
Boucle en cours 3277.1730999/02/26/2018 09:58:21
Boucle en cours 3577.1894663/02/26/2018 10:03:21
Boucle en cours 3877.2066277/02/26/2018 10:08:22
Boucle en cours 4177.2289892/02/26/2018 10:13:22
Boucle en cours 4477.2508087/02/26/2018 10:18:22
Boucle en cours 4777.2925131/02/26/2018 10:23:22
Boucle en cours 5077.3233082/02/26/2018 10:28:22
Boucle en cours 5377.3425039/02/26/2018 10:33:22
Boucle en cours 5677.3730132/02/26/2018 10:38:22
Délai écoulé, 02/26/2018 10:38:22
[/code:1]
On remarque qu'entre 9:33 et 9:53 il manque les tranches de 9:38, 9:43 et 9:48
Je précise que le phénomène ne se produit jamais sur mon ordinateur fixe Dell XPS-8900, qui exécute le script maintenant régulièrement chaque soir.
Il se produit pratiquement à chaque fois sur un ordinateur portable HP.
Peut-être start-sleep utilise-t-il une instruction hardware qui elle-même déraille ?
Une idée pour contourner le problème ?
gabier
Dans mon script qui gère des tâches de sauvegarde, j'utilise une boucle d'attente, qui elle-même utilise start-sleep.
[code:1]##### Boucle d'attente ###################
$watch=[System.Diagnostics.Stopwatch]::«»startNew()
$DateStart=$watch.Elapsed.TotalSeconds
$monlog=\"C:\Users\Josette\Documents\NAS\Monlog.txt\"
$Message=\"################################## \" >>$monlog
$Message=\"Début de boucle. Départ : \"+ $DateStart >>$monlog
$DateFin=$DateStart+5400
$Message=\"DateFin=$DateFin\">>$monlog
Do{
Start-Sleep -s 300
$DateCour=$watch.Elapsed.TotalSeconds
$message=\"Boucle en cours $DateCour/$(get-date)\" >>$monlog
}while($DateCour -le $DateFin)
$Message=\"Délai écoulé, $(get-date)\" >>$monlog[/code:1]
J'ai choisi une durée d'attente de 5mn pour déboguer le mécanisme. Chaque fois qu'une tranche se termine normalement Powershell envoie dans le log l'état de stopwatch et la date-heure. Le délai total est de 5400 secondes soit 1,5 heures.
Or dans le log on constate des choses bizarres. Des fois, après 1800 secondes, le \"sleep\" ne se finit pas avant 12000 ou 13000 secondes, ce qui n'est pas conforme à ce que je cherche. Exemple :
[code:1]
Attente. Départ : 0.0027393
DateFin=5400.0027393
Boucle en cours 300.1321417/02/24/2018 19:56:59
Boucle en cours 600.165338/02/24/2018 20:01:59
Boucle en cours 900.2549121/02/24/2018 20:06:59
Boucle en cours 1200.2740606/02/24/2018 20:11:59
Boucle en cours 1500.3401494/02/24/2018 20:16:59
Boucle en cours 1800.3531683/02/24/2018 20:21:59
Boucle en cours 12166.0031427/02/24/2018 23:14:45
Délai écoulé : 02/24/2018 23:14:45[/code:1]
Des fois le processus se déroule plus normalement mais il manque une ou deux tranches. Exemple
[code:1]
Début de boucle. Départ : 4.87E-05
DateFin=5400.0000487
Boucle en cours 300.1366048/02/26/2018 09:08:44
Boucle en cours 600.1640561/02/26/2018 09:13:44
Boucle en cours 900.1881993/02/26/2018 09:18:44
Boucle en cours 1200.2042255/02/26/2018 09:23:45
Boucle en cours 1500.2618817/02/26/2018 09:28:45
Boucle en cours 1800.2912738/02/26/2018 09:33:45
Boucle en cours 2977.1441055/02/26/2018 09:53:21
Boucle en cours 3277.1730999/02/26/2018 09:58:21
Boucle en cours 3577.1894663/02/26/2018 10:03:21
Boucle en cours 3877.2066277/02/26/2018 10:08:22
Boucle en cours 4177.2289892/02/26/2018 10:13:22
Boucle en cours 4477.2508087/02/26/2018 10:18:22
Boucle en cours 4777.2925131/02/26/2018 10:23:22
Boucle en cours 5077.3233082/02/26/2018 10:28:22
Boucle en cours 5377.3425039/02/26/2018 10:33:22
Boucle en cours 5677.3730132/02/26/2018 10:38:22
Délai écoulé, 02/26/2018 10:38:22
[/code:1]
On remarque qu'entre 9:33 et 9:53 il manque les tranches de 9:38, 9:43 et 9:48
Je précise que le phénomène ne se produit jamais sur mon ordinateur fixe Dell XPS-8900, qui exécute le script maintenant régulièrement chaque soir.
Il se produit pratiquement à chaque fois sur un ordinateur portable HP.
Peut-être start-sleep utilise-t-il une instruction hardware qui elle-même déraille ?
Une idée pour contourner le problème ?
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 8 ans 2 mois #25057
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Comportement fantaisiste de start-sleep
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 8 ans 2 mois #25058
par Philippe
Réponse de Philippe sur le sujet Re:Comportement fantaisiste de start-sleep
bonjour a tous
je suis d'accord avec Laurent, pour le passage par le .NET en direct parfois ça aide !
je voulais simplement dire une chose sur l'écriture :
variable égale message redirection fichier
ex :
[code:1]$Message=\"Délai écoulé, $(get-date)\" >>$monlog[/code:1]
le \"$message =\" est inutile et peu peut être provoquer des choses bizarre
dans tous les cas il faut choisir soit :
[code:1]\"Délai écoulé, $(get-date)\" >> $monlog[/code:1]
soit
[code:1]$Message = \"Délai écoulé, $(get-date)\"
$Message >> $monlog[/code:1]
mais les deux en une ligne ne sert a rien !!
je suis d'accord avec Laurent, pour le passage par le .NET en direct parfois ça aide !
je voulais simplement dire une chose sur l'écriture :
variable égale message redirection fichier
ex :
[code:1]$Message=\"Délai écoulé, $(get-date)\" >>$monlog[/code:1]
le \"$message =\" est inutile et peu peut être provoquer des choses bizarre
dans tous les cas il faut choisir soit :
[code:1]\"Délai écoulé, $(get-date)\" >> $monlog[/code:1]
soit
[code:1]$Message = \"Délai écoulé, $(get-date)\"
$Message >> $monlog[/code:1]
mais les deux en une ligne ne sert a rien !!
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 8 ans 2 mois #25060
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Comportement fantaisiste de start-sleep
6ratgus écrit:

Ce n'est pas une écriture courante, mais utilisée .
Cette écriture est spécifiée :
[code:1]($Message=\"Délai écoulé, $(get-date)\"«»)[/code:1]
Je découvre que pour une redirection ça fonctionne sans les parenthèses qui précisent l'intention.
6ratgus écrit:
Ah, c'est pas sûrmais les deux en une ligne ne sert a rien !!
Ce n'est pas une écriture courante, mais utilisée .
Cette écriture est spécifiée :
[code:1]($Message=\"Délai écoulé, $(get-date)\"«»)[/code:1]
Je découvre que pour une redirection ça fonctionne sans les parenthèses qui précisent l'intention.
6ratgus écrit:
Oui si on ne connait pas le comportement.le \"$message =\" est inutile et peu peut être provoquer des choses bizarre
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 8 ans 2 mois #25061
par Philippe
Réponse de Philippe sur le sujet Re:Comportement fantaisiste de start-sleep
salut Laurent
je vois que le sujet de certain type d'écriture ambigu est en cours d'étude cher les powershellers !
tu pense que dans notre cas, ici que l'affectation ne ce fasse pas, ne soit pas une erreur de codage et ne doit pas provoquer de message d'erreur ?
pour moi elle crée la confusion dans la lecture surtout pour les novices ! mais c'est mon avis !
je vois que le sujet de certain type d'écriture ambigu est en cours d'étude cher les powershellers !
tu pense que dans notre cas, ici que l'affectation ne ce fasse pas, ne soit pas une erreur de codage et ne doit pas provoquer de message d'erreur ?
pour moi elle crée la confusion dans la lecture surtout pour les novices ! mais c'est mon avis !
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 8 ans 2 mois #25062
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Comportement fantaisiste de start-sleep
6ratgus écrit:
Effectivement de réécrire la ligne peut être testé, on retire qq chose qui nous fait douter.
6ratgus écrit:
Mais le parseur PS l'autorise.
Pour l'exemple cité, l'auteur doit être seul à maintenir son module, il assume ses choix.
Je ne suis pas sur de comprendre, ça fonctionne (mal peut être) mais le log est rempli.tu pense que dans notre cas, ici que l'affectation ne ce fasse pas, ne soit pas une erreur de codage et ne doit pas provoquer de message d'erreur ?
Effectivement de réécrire la ligne peut être testé, on retire qq chose qui nous fait douter.
6ratgus écrit:
Oui.pour moi elle crée la confusion dans la lecture surtout pour les novices !
Mais le parseur PS l'autorise.
Pour l'exemple cité, l'auteur doit être seul à maintenir son module, il assume ses choix.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.047 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Comportement fantaisiste de start-sleep