Question
Syntax de Write-host
- MARTINELLI
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
il y a 3 ans 3 semaines #30577
par MARTINELLI
Syntax de Write-host a été créé par MARTINELLI
Je suis toujours en apprentissage de Powershell, et je me pose une question sur la syntaxe de write-Host
Si j'écris par exemple :
write-host "Ceci est la date : " Get-Date
j'obtiens
Ceci est la date : Get-Date
Par contre si j'écris
write-host "Ceci est la date : " (Get-Date)
j'obtiens
Ceci est la date : 05/03/2021 10:56:25
Il semble donc que l'exécution de la cmdlet get-date avec la cmdlet write-host ne fonctionne que si on la place entre parenthèses.
Ma question est donc, est-ce un cas particulier de write-host ou y-a-t-il une syntaxe spécifique si l'on combine plusieurs cmdlet sur la même ligne ?
Merci d'avance
Gérard
Si j'écris par exemple :
write-host "Ceci est la date : " Get-Date
j'obtiens
Ceci est la date : Get-Date
Par contre si j'écris
write-host "Ceci est la date : " (Get-Date)
j'obtiens
Ceci est la date : 05/03/2021 10:56:25
Il semble donc que l'exécution de la cmdlet get-date avec la cmdlet write-host ne fonctionne que si on la place entre parenthèses.
Ma question est donc, est-ce un cas particulier de write-host ou y-a-t-il une syntaxe spécifique si l'on combine plusieurs cmdlet sur la même ligne ?
Merci d'avance
Gérard
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6300
- Remerciements reçus 68
il y a 3 ans 3 semaines #30578
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Syntax de Write-host
>>"Il semble donc que l'exécution de la cmdlet get-date avec la cmdlet write-host ne fonctionne que si on la place entre parenthèses."
Oui, car sinon l'analyseur de la ligne de commande le considère comme une string, car il est vu comme un argument ( [string[]] )
On peut le constater avec ceci :>>" y-a-t-il une syntaxe spécifique si l'on combine plusieurs cmdlet sur la même ligne ?"
On utiilse le pipeline ou le point virgule pour les combiner, dans certains cas il faut aider le parseur à préciser ce qu'il doit faire.
En complément il faudrait regarder ce que l'AST renvoi dans les deux cas.
Oui, car sinon l'analyseur de la ligne de commande le considère comme une string, car il est vu comme un argument ( [string[]] )
On peut le constater avec ceci :
trace-command ParameterBinding -Expression { write-host "Ceci est la date : " Get-Date} -PSHost
trace-command ParameterBinding -Expression { write-host "Ceci est la date : " (Get-Date)} -PSHost
On utiilse le pipeline ou le point virgule pour les combiner, dans certains cas il faut aider le parseur à préciser ce qu'il doit faire.
En complément il faudrait regarder ce que l'AST renvoi dans les deux cas.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- MARTINELLI
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
il y a 3 ans 3 semaines - il y a 3 ans 3 semaines #30588
par MARTINELLI
Réponse de MARTINELLI sur le sujet Syntax de Write-host
Merci encore Laurent pour ce surplus d'informations. Je découvre chaque jour les plus et les moins de PowerShell. Dans les plus, il y a les cmdlet et le piping que je trouve génial et qui simplifient beaucoup l'écriture dess scripts.
Par contre concernant la syntaxe du langage, parfois je trouve que les concepteurs se sont demandé pourquoi faire simple quand on peut faire compliqué.
Par exemple pourquoi mettre systématiquement le signe $ devant une variable ? Je comprendrais que ce soit pour éviter d'avoir des variables réservées, mais elles existent aussi avec PowerShell.
Il y a quelques incohérences qui m'étonnent
Par exemple :
Get-Item -Path 'C:\Windows' | Get-Member -outvariable myvariable
Ici le nom de la variable myvariable n'est pas préfixé par $, alors qur pour l'utiliser ensuite il faut rajouter le dollar.
Dans le cas que j'avais soulevé, je comprends que Get-date puisse être considéré comme un String s'il n'est pas encadré par des parenthèses, mais si le développeur souhaitait qu'il soit un string et non une cmdlet, il suffisait le l'inclure entre des "quotes" ce qui allégeait la syntaxe.
Enfin, les choses étant ainsi, il faut l'admettre. J'essaie simplement de comprendre les raisons (un de mes gros défauts).
Merci encore
Gérard
Par contre concernant la syntaxe du langage, parfois je trouve que les concepteurs se sont demandé pourquoi faire simple quand on peut faire compliqué.
Par exemple pourquoi mettre systématiquement le signe $ devant une variable ? Je comprendrais que ce soit pour éviter d'avoir des variables réservées, mais elles existent aussi avec PowerShell.
Il y a quelques incohérences qui m'étonnent
Par exemple :
Get-Item -Path 'C:\Windows' | Get-Member -outvariable myvariable
Ici le nom de la variable myvariable n'est pas préfixé par $, alors qur pour l'utiliser ensuite il faut rajouter le dollar.
Dans le cas que j'avais soulevé, je comprends que Get-date puisse être considéré comme un String s'il n'est pas encadré par des parenthèses, mais si le développeur souhaitait qu'il soit un string et non une cmdlet, il suffisait le l'inclure entre des "quotes" ce qui allégeait la syntaxe.
Enfin, les choses étant ainsi, il faut l'admettre. J'essaie simplement de comprendre les raisons (un de mes gros défauts).
Merci encore
Gérard
Dernière édition: il y a 3 ans 3 semaines par MARTINELLI .
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6300
- Remerciements reçus 68
il y a 3 ans 3 semaines #30590
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Syntax de Write-host
>>il y a les cmdlet et le piping que je trouve génial
le concept existait depuis 'longtemps', émettre des objets dans le pipe est effectivement une très bonne idée.
>>Par contre concernant la syntaxe du langage, parfois je trouve que les concepteurs se sont demandé pourquoi faire simple quand on peut faire compliqué.
A l'origine le public visé était les admins systèmes, dans son livre Bruce Payette explique certaines de ces décisions.
Ils souhaitaient proposer qq chose qui se préoccupait d'automatiser des tâches sans se préoccuper du comment l'écrire ( si j'ai bien compris).
Les spec du langages de PS font 50 pages, contre +-500 pour le C#.
>>Par exemple pourquoi mettre systématiquement le signe $ devant une variable ?
C'est un emprunt à un autre langage de script, Perl je crois.
>>Ici le nom de la variable myvariable n'est pas préfixé par $, alors que pour l'utiliser ensuite il faut rajouter le dollar.
Les variables sont aussi des objets, ici on manipule un nom (identifiant) et cela laisse la possibilité d'une indirection : $Param='NomVar1'; Get-Variable $Param
Mais je ne sais pas/plus le pq de ce choix.
>> il suffisait le l'inclure entre des "quotes" ce qui allégeait la syntaxe.
Oui, le parseur de PS est parfois déroutant. Par exemple, ici c'est le type du paramètre du cmdlet qui influence la lecture de la ligne de commande.
Et il y a d'autres surprises avec les opérateurs
le concept existait depuis 'longtemps', émettre des objets dans le pipe est effectivement une très bonne idée.
>>Par contre concernant la syntaxe du langage, parfois je trouve que les concepteurs se sont demandé pourquoi faire simple quand on peut faire compliqué.
A l'origine le public visé était les admins systèmes, dans son livre Bruce Payette explique certaines de ces décisions.
Ils souhaitaient proposer qq chose qui se préoccupait d'automatiser des tâches sans se préoccuper du comment l'écrire ( si j'ai bien compris).
Les spec du langages de PS font 50 pages, contre +-500 pour le C#.
>>Par exemple pourquoi mettre systématiquement le signe $ devant une variable ?
C'est un emprunt à un autre langage de script, Perl je crois.
>>Ici le nom de la variable myvariable n'est pas préfixé par $, alors que pour l'utiliser ensuite il faut rajouter le dollar.
Les variables sont aussi des objets, ici on manipule un nom (identifiant) et cela laisse la possibilité d'une indirection : $Param='NomVar1'; Get-Variable $Param
Mais je ne sais pas/plus le pq de ce choix.
>> il suffisait le l'inclure entre des "quotes" ce qui allégeait la syntaxe.
Oui, le parseur de PS est parfois déroutant. Par exemple, ici c'est le type du paramètre du cmdlet qui influence la lecture de la ligne de commande.
Et il y a d'autres surprises avec les opérateurs
Tutoriels PowerShell
Les utilisateur(s) suivant ont remercié: MARTINELLI
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.074 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Syntax de Write-host