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 :

le verbe "GET" dans les cmdlets et les fonctions


Sujet :

Scripts/Batch

  1. #1
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut le verbe "GET" dans les cmdlets et les fonctions
    salut,

    le verbe "GET" est l'un des verbes autorisés dans le nommage des fonctions et cmdlets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PS II> Get-Verb -verb get
    on peux omettre ce verbe pour toutes les cmdlets et fonctions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PS II> childitem c:\inuse | acl
    PS II> hotfix; psdrive
    sauf les cmdlets get-command et get-process ne supportent pas cette omission parceque le mot "process" est un mot reservé (help keywords) et "command" est vu par powershell comme etant le vieux shell "command.com"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PS II> man key | Select-String "\s{5,}about_*"
    il est à noter aussi que les fonction ayant comme nom un mot reservé seront traiter comme étant des mots reservés et non pas comme étant des fonctions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PS II> function get-Function {1}
    PS II> function
    >>
    et s'il s'agissait d'un nom d'un executable alors l'interpréteur powershell traitera cette fonction comme étant une commande externe et non pas une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PS II> function get-cmd {1}
    PS II> cmd
    Microsoft Windows XP [version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.
    
    D:\>

    l'omission du verbe "GET" à un grand désavantage est qu'on ne pourra plus bénéficier de la puissance de la complétion de powershell

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PS II> Serv{TAB]ice -n[TAB] alg

    un autre désavantage, est que parfois avec la l'utilisation de cmdlet get-help on se retrouve devant des resultats inatendus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PS II> help verb
     
    NOM
        Write-Verbose
    ...
    .....


    pour finir, voici une petite fonction qui s'appuie sur les mots reservé et teste si une commande est valide ou pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    PS II> cat c:\inuse\scripts\psh\tcv.ps1
    
    #############################################################
    #
    #  PS D:\> Test-CommandValidation -command get-process | fl
    #            VerbNounConvention : True
    #            ReservedKeyWords   : True
    #            VerbConvention     : True
    #
    #############################################################
    function Test-CommandValidation {
       param($Command)
       $keys = man key |
                 Select-String "(\S+)(?=\s{5,}about_*)" |
                      select -expand Matches |
                            select -expand value
       $verbNounConvention = $verbconvention = $reservedkeywords = $false
       $verb,$noun = $Command.Split('-')
       if($noun) {
          $verbNounConvention = $true
          if( (get-verb $verb) ) { $verbconvention = $true }
          if($keys -contains $noun) { $reservedkeywords = $true }
       }
       else {
           $reservedkeywords = $verbconvention = $null
       }
        new-object PSObject -prop @{
           VerbNounConvention = $verbNounConvention
           VerbConvention = $verbconvention
           ReservedKeyWords = $reservedkeywords
        }
    }

  2. #2
    Membre éclairé Avatar de suchiwa
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2010
    Messages
    435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2010
    Messages : 435
    Points : 899
    Points
    899
    Par défaut
    Bonjour,

    J'ai récemment fait du release de vbs vers powershell, et le nommage des fonctions ne suivait pas la convention de powershell.

    Lors de l'import de mon module avec les fonctions, un avertissement jaune prévoyait le pire.

    Get-verb,le technet ou msdn donnent une liste de tous les verbes à utiliser pour une fonction, cependant la liste est incomplète .

    A mon sens il en manque quelques uns :

    delete
    deploy
    demand
    ask
    [...]


    Et surtout l'impossibilité d'agrémenter cette liste avec un set-verb, pour normer les besoins du client (être homogène entre les anciens scripts et les nouveaux).

    Pour powershell v3 ?
    Dans le doute, reboot...

    https://mcp.microsoft.com/authenticate/validatemcp.aspx
    931584 | Micr0s0ft

  3. #3
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,


    j'ai pas encore PSH3 sous la main pour tester, mais j'ai entendu qu'ils ont ajouter quelques nouveaux verbes.

    Pour le verbe "delete" il y a "remove"

    pour ma part, la liste des verbe me suffit, car je n'utilise que 6 ~ 7 verbes conventionnels dans mes scripts.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    get-verb | sort  Group | ft -GroupBy group

  4. #4
    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
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par suchiwa Voir le message
    Get-verb,le technet ou msdn donnent une liste de tous les verbes à utiliser pour une fonction, cependant la liste est incomplète .
    Voir ceci :
    http://msdn.microsoft.com/en-us/libr...28(VS.85).aspx
    et les paramètres ici :
    http://msdn.microsoft.com/en-us/libr...52(VS.85).aspx

    Citation Envoyé par suchiwa Voir le message
    A mon sens il en manque quelques uns :
    Propose les sur MS Connect.
    Ensuite, Paul a besoin des siens, Henry aussi, sans compter Emilie...
    Bref chacun ajoute les siens, au final on retombe dans les mêmes travers que ceux que le nommage Verbe-Nom de PS voulait éviter.
    Il y en a peu et il faut s'en satisfaire, c'est certes un appauvrissement du langage, mais à l'usage c'est pratique pour la "découverte" des commandes.
    C'est une contrainte, personne ne les aime.

    Revoir les principes de base ici :
    http://laurent-dardenne.developpez.c.../Introduction/

  5. #5
    Membre éclairé Avatar de suchiwa
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2010
    Messages
    435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2010
    Messages : 435
    Points : 899
    Points
    899
    Par défaut
    Citation Envoyé par Laurent Dardenne Voir le message
    C'est une contrainte, personne ne les aime.
    Bonjour Laurent,

    C'est un retour que j'ai chez un client, un cas concret dans le secteur bancaire à Noisiel...
    Ils passent toutes les applications vers 2008 et powersehll.

    Le peu de contraintes qu'ils avaient en vbs se ressentent dans la release en powershell.

    Typiquement, faire valider par 3 équipes que la fonction "delete-*" n'existera pas en powershell, et valider "remove-*" va demander 3 autres réunions et 3 semaines supplémentaires...

    Tu prèches un convaincu, ceux qu'il faut convaincre, se sont les chefs de projet qui te disent en réunion "Ha, powershell ne sait pas faire ça...".

    Je suis le premier à défendre les bienfaits naturels de powershell, pas pour le geste, pour ces vertues industrielles entre autres choses. Comme pour tous les produits microsoft, des améliorations sont possibles.

    Les travers dont tu parles sont souvent les mauvaises pratiques de quelques informaticiens qui se soucient peu des standards et des normes. Le problème ne vient pas de l'outil, mais de son utilisation.

    Cordialement,
    Vincent
    Dans le doute, reboot...

    https://mcp.microsoft.com/authenticate/validatemcp.aspx
    931584 | Micr0s0ft

  6. #6
    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
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par suchiwa Voir le message
    Typiquement, faire valider par 3 équipes que la fonction "delete-*" n'existera pas en powershell, et valider "remove-*" va demander 3 autres réunions et 3 semaines supplémentaires...
    Tu peux leur conseiller la lecture du chapitre 3-2. Principe de nommage des Cmdlets du tutoriel cité. S'ils ne comprennent pas l'intérêt, bha...
    bonnes réunions

    En passant, chez Microsoft, l'équipe PS a dû expliquer et réexpliquer en interne aux différentes équipes produit, l'importance du nommage et la facilité de découverte qui en découle.
    Et justement cette convention est faîte pour ne pas perdre du temps avec cette opération de catégorisation chronophage.

    Peut-être que chez ton client, les équipes souhaitent continuer à faire du VBS avec Powershell

    Bonnes chances.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/08/2007, 12h46

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