IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Des ingénieurs demandent à ce que soient ajoutés les opérateurs de type Bash && et || à PowerShell


Sujet :

Scripts/Batch

  1. #1
    Chroniqueur Actualités

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    9 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2013
    Messages : 9 368
    Par défaut Des ingénieurs demandent à ce que soient ajoutés les opérateurs de type Bash && et || à PowerShell
    Des ingénieurs demandent à ce que soient ajoutés les opérateurs de type Bash && et || à PowerShell,
    dans une RFC

    Les requests for comments (RFC), littéralement « demande de commentaires », sont une série numérotée de documents officiels décrivant les aspects et spécifications techniques de l'Internet, ou de différents matériels informatiques (routeurs, serveur DHCP). Peu de RFC sont des standards, mais tous les documents publiés par l'IETF sont des RFC.

    Dans une RFC, des ingénieurs ont demandé à ce que Powershell envisage d'ajouter des opérateurs && et || de type Bash. Robert Holt, ingénieur de l'équipe Powershell répondant au pseudonyme rjmholt a expliqué ceci :

    Implémenter && et ||.

    Une instruction comme cmd1 && cmd2 devrait se comporter comme cmd1; if ($?) { cmd2 }.

    Je voudrais avoir des retours sur ce Pull-Request concernant une telle implémentation et les tests (je suis toujours à la recherche de nouveaux tests!).

    Notez s'il vous plaît :
    • J'ai choisi l'indicateur de fonctionnalité expérimentale en partant du principe que :
      1. nous devrions tester les nouvelles fonctionnalités de langage le plus largement possible,
      2. et en faisant de la syntaxe une fonctionnalité expérimentale afin que les tests ne puissent pas utiliser cette syntaxe.
    • Après avoir discuté avec @daxian-dbw, je n’ai pas implémenté les continuations. Ils peuvent être mis en œuvre si vous le souhaitez à l'issue de la RFC.
    En fait, cette suggestion ne date pas de maintenant. Des suggestions similaires avaient déjà été faite avant comme celle de mars 2017 par l'ingénieur Michael Klement répondant au pseudonyme mklement0. Il avait expliqué que le style Bash avec les opérateurs de contrôle && et || serait des ajouts pratiques au langage Powershell. Il a donné des exemples pour illustrer son propos disant qu'au lieu d'écrire

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # If command A succeeds, execute command B too.
    csc /nologo file.cs
    if (0 -eq $LASTEXITCODE) { git commit -m 'ok' }
     
    # if command A fails, execute command B.
    csc /nologo file.cs
    if (0 -ne $LASTEXITCODE) { git commit -m 'failed'  }

    Nom : powershell.png
Affichages : 6420
Taille : 9,5 Ko

    Quelqu'un serait en mesure d'écrire

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # If command A succeeds, execute command B too.
    csc /nologo file.cs && git commit -m 'ok'
     
    # if command A fails, execute command B.
    csc /nologo file.cs || git commit -m 'failed'

    Et Michael d'indiquer que « les exemples s'appuient sur des utilitaires externes, mais ces opérateurs seraient tout aussi pratiques pour les commandes natives de PowerShell (où $? Plutôt que $LASTEXITCODE devrait être examiné) ».

    Ryan Yates, MVP Microsoft répondant au pseudonyme Kilasuit, a expliqué à Robert Holt :

    « Honnêtement, les cas d'utilisation montrés dans le RFC ne rendent pas cela assez clair pour que je puisse penser que c'est un ajout utile au langage, mais c'est peut-être parce que je suis un utilisateur Windows PowerShell de longue date et que, pour certains des cas d'utilisation, j'aurais déjà codé les avantages supposés que cela pourrait apporter de manière beaucoup plus lisible subjectivement parlant

    « J'ai un autre problème clé avec la RFC, c'est le fait qu'il soit prémarqué comme étant prévu pour implémentation. Techniquement, cela se lit comme si vous aviez rempli le RFC et, quels que soient les commentaires reçus, cela se produira. Ce qui, je l’espère, n’est pas le cas et que les commentaires ici seront correctement pris en compte (comme ils le devraient également pour les autres RFC)

    « Je pense que cela devrait être renommé Désir d'implémenter: (Faible | Moyen | Élevé) bien que ce soit un aparté pour le modèle RFC ».

    Les opérateurs && et || autorisent l’exécution conditionnelle d’une commande cmd suivant la valeur du code de retour de la dernière commande précédemment exécutée.

    Opérateur : &&Syntaxe : cmd1 && cmd2Le fonctionnement est le suivant : cmd1 est exécutée et si son code de retour est égal à 0, alors cmd2 est également exécutée.

    Code Bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ grep daemon pass && echo daemon existe
    daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    daemon existe
    $

    La chaîne de caractères daemon est présente dans le fichier pass, le code de retour renvoyé par l’exécution de grep est 0 ; par conséquent, la commande echo daemon existe est exécutée.

    Opérateur : ||Syntaxe : cmd1 || cmd2cmd1 est exécutée et si son code de retour est différent de 0, alors cmd2 est également exécutée.

    Pour illustrer cela, supposons que le fichier tutu n’existe pas.

    Code Bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ ls pass tutu
    ls: impossible d'accéder à tutu: Aucun fichier ou dossier de ce type
    pass
    $
    $ rm tutu || echo tutu non efface
    rm: impossible de supprimer «tutu»: Aucun fichier ou dossier de ce type
    tutu non efface
    $

    Le fichier tutu n’existant pas, la commande rm tutu affiche un message d’erreur et produit un code de retour différent de 0 : la commande interne echo qui suit est donc exécutée.

    Source : Pull-Request

    Et vous ?

    Utilisez-vous PowerShell ?
    Que pensez-vous de cette proposition ?

    Voir aussi :

    Microsoft avance que la prochaine itération de PowerShell Core sera baptisée PowerShell 7, l'éditeur explique pourquoi il envisage de supprimer "Core"
    PowerShell Core 6.1 est disponible : support de .NET Core 2.1, compatibilité avec les modules Windows, cmdlets et rendu Markdown et plus
    PowerShell est maintenant disponible sur Linux en tant que paquet snap, pour une meilleure prise en charge des distributions Linux
    Vous pouvez maintenant utiliser Linux pour administrer à distance des machines Windows, avec un accès distant PowerShell via SSH
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Perso, je préfère voir cette syntaxe plus clair :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem z:\; if ($?) { Write-Host success } else { Write-Host failed }
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem z:\; if (!$?) { Write-Host failed }

    Je suis d'avis que l'implémentation de l'opérateur conditionnel ou ternaire issu de langage évolué serait plus intéressant.

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par ericlm128 Voir le message
    Je suis d'avis que l'implémentation de l'opérateur conditionnel ou ternaire issu de langage évolué serait plus intéressant.
    C'est en cours, du coup il faut modifier les outils.
    Ensuite la présence de ce type d'opérateur n'oblige pas son utilisation, on pourrait aussi épiloguer qu'il y a des points plus intéressants à corriger et/ou à ajouter ...

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/10/2014, 11h37
  2. Réponses: 5
    Dernier message: 08/10/2013, 23h20
  3. Réponses: 270
    Dernier message: 07/12/2010, 17h40
  4. quand est ce que on ajoute les classe associations
    Par jean sami dans le forum UML
    Réponses: 5
    Dernier message: 19/08/2008, 11h44
  5. Réponses: 10
    Dernier message: 26/05/2006, 23h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo