Question Comportement fantaisiste de start-sleep

Plus d'informations
il y a 8 ans 2 mois #25055 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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 2 mois #25057 par xyz
Salut,
regarde ceci .
A tester.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 2 mois #25058 par Philippe
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 !! :sick:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 2 mois #25060 par xyz
6ratgus écrit:

mais les deux en une ligne ne sert a rien !! :sick:

Ah, c'est pas sûr :)
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:

le \"$message =\" est inutile et peu peut être provoquer des choses bizarre

Oui si on ne connait pas le comportement.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 2 mois #25061 par Philippe
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 ? :evil:

pour moi elle crée la confusion dans la lecture surtout pour les novices ! mais c'est mon avis ! :P

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 2 mois #25062 par xyz
6ratgus écrit:

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 ?

Je ne suis pas sur de comprendre, ça fonctionne (mal peut être) mais le log est rempli.
Effectivement de réécrire la ligne peut être testé, on retire qq chose qui nous fait douter.
6ratgus écrit:

pour moi elle crée la confusion dans la lecture surtout pour les novices !

Oui.
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.046 secondes
Propulsé par Kunena