Question
Comportement fantaisiste de start-sleep
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
Laurent dans l'exemple donner $message ne reçois rien, plus exactement il reçois null !
bien que la redirection fonctionne, l'égalité ne renvoie même pas le résultat de l'opération de redirection, même quand il y une erreur !
que le parseur PS l'autorise ne signifie pas toujours que ce soit bien écris (un peu comme mon orthographe on arrive a lire même quand c'est mal écrit) et prête parfois a confusion !
[code:1]PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> $Message=\"Délai écoulé, $(get-date)\" > \"C:\test.txt\"
out-file : L'accès au chemin d'accès 'C:\test.txt' est refusé.
Au caractère Ligne:1 : 1
+ $Message=\"Délai écoulé, $(get-date)\" > \"C:\test.txt\"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (:«») [Out-File], UnauthorizedAccessException
+ FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand
PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> $Message
PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> $Message.GetType()
Impossible d’appeler une méthode dans une expression Null.
Au caractère Ligne:1 : 1
+ $Message.GetType()
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (:«») [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : InvokeMethodOnNull[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
Oui tu as raison, c'est au moins une erreur ici et peut être un bug.Laurent dans l'exemple donner $message ne reçois rien, plus exactement il reçois null !
bien que la redirection fonctionne, l'égalité ne renvoie même pas le résultat de l'opération de redirection, même quand il y une erreur !
J'étais resté sur ce comportement :
[code:1]
$Message=$null
if ($Message=\"Délai écoulé, $(get-date)\"«») {'ok'} else {'nok'}
$Message[/code:1]
Mais je n'avais pas vérifié le résultat
C'est donc à corriger dans le script.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 58
- Remerciements reçus 0
Merci LaurentSalut,
regarde ceci .
A tester.
J'ai fait un code avec ce timer .NET (ce n'est pas un langage qu'on apprend ici, c'est une collection de langages !!!
[code:1]\"Début de boucle. Départ $(get-date)\" >>$monlog
$NSlice=18
$Delay=300000
For($i=0;$i -lt $NSlice;$i++){
[system.threading.thread]::«»Sleep($Delay)
\"Boucle en cours tranche N°$i /$(get-date)\" >>$monlog
}
\"Délai écoulé : $(get-date)\" >>$monlog[/code:1]
Il y a encore des anomalies
[code:1]Boucle en cours tranche N°0 /02/27/2018 10:58:52
Boucle en cours tranche N°1 /02/27/2018 11:03:52
Boucle en cours tranche N°2 /02/27/2018 11:08:52
Boucle en cours tranche N°3 /02/27/2018 11:13:52
Boucle en cours tranche N°4 /02/27/2018 11:18:52
Boucle en cours tranche N°5 /02/27/2018 11:23:52
Boucle en cours tranche N°6 /02/27/2018 11:28:52
Boucle en cours tranche N°7 /02/27/2018 11:33:52
Boucle en cours tranche N°8 /02/27/2018 11:38:52
Boucle en cours tranche N°9 /02/27/2018 11:43:52
Boucle en cours tranche N°10 /02/27/2018 12:06:14
Boucle en cours tranche N°11 /02/27/2018 12:11:14
Boucle en cours tranche N°12 /02/27/2018 12:16:14
Boucle en cours tranche N°13 /02/27/2018 12:21:14
Boucle en cours tranche N°14 /02/27/2018 12:26:14
Boucle en cours tranche N°15 /02/27/2018 12:31:14
Boucle en cours tranche N°16 /02/27/2018 12:36:15
Boucle en cours tranche N°17 /02/27/2018 12:41:15
Délai écoulé : 02/27/2018 12:41:15[/code:1]
On voit qu'entre les tranches 9 et 10 il y a un trou de 18 minutes au leu du délai normal de 5 mn.
Comme avec ce timer je ne peux pas cumuler le temps j'ai fait un nombre défini de \"tranches de temps\". Evidemment, il faudrait que je mette une borne en temps. Ca fera \"ceinture et bretelles\" mais en attendant j'ai des chances de ne pas trop dépasser mon temps imparti !
gratgus écrit:
...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 !!
D'accord Gratgus, j'ai simplifié dans ton sens, car je n'ai pas bien compris la discussion avec Laurent
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
En gros, Powershell permet lors d'une affection de valeur dans une variable d'émettre dans le pipeline le résultat de cette affectation à condition de placer l'instruction entre parenthèses :D'accord Gratgus, j'ai simplifié dans ton sens, car je n'ai pas bien compris la discussion avec Laurent
[code:1]
#Affecte uniquement une valeur, pas d'émission de cette valeur dans le pipeline
$MaVariable=10
#Affecte une valeur et émet cette valeur dans le pipeline
($MaVariable=10)
#Un seule instruction équivalente à ces 2 instructions
$MaVariable=10
Write-output 10
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
Sur le même PC, il faudrait également vérifier si ce code fonctionne de la même manière dans une console d'une session utilisateur (autre contexte).
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 58
- Remerciements reçus 0
gabier écrit:
En gros, Powershell permet lors d'une affection de valeur dans une variable d'émettre dans le pipeline le résultat de cette affectation à condition de placer l'instruction entre parenthèses :D'accord Gratgus, j'ai simplifié dans ton sens, car je n'ai pas bien compris la discussion avec Laurent
OK, Compris
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Comportement fantaisiste de start-sleep