Question Syntax de Write-host

Plus d'informations
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

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

Plus d'informations
il y a 3 ans 3 semaines #30578 par Laurent Dardenne
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 :
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
>>" 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.

Tutoriels PowerShell

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

Plus d'informations
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

 
Dernière édition: il y a 3 ans 3 semaines par MARTINELLI .

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

Plus d'informations
il y a 3 ans 3 semaines #30590 par Laurent Dardenne
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 :-)

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
Propulsé par Kunena