RUBRIQUE
    about_Command_Precedence

DESCRIPTION COURTE
    Décrit comment Windows PowerShell détermine les commandes à exécuter.


DESCRIPTION LONGUE

    Cette rubrique explique comment Windows PowerShell détermine les 
    commandes à exécuter, en particulier lorsqu'une session contient 
    plusieurs commandes portant le même nom. Elle explique également 
    comment exécuter des commandes qui ne s'exécutent pas par défaut et 
    comment éviter les conflit de nom de commande dans votre session.



 PRÉCÉDENCE DES COMMANDES
    Lorsqu'une session inclut des commandes portant le même nom, 
    Windows PowerShell utilise les règles ci-dessous pour identifier 
    les commandes à exécuter.

    Ces règles s'avèrent très importantes lorsque vous ajoutez des 
    commandes à votre session à partir de modules, de composants 
    logiciels enfichables et d'autres sessions.

    
    -- Si vous spécifiez le chemin d'accès à une commande, Windows 
       PowerShell exécute cette dernière à l'emplacement spécifié par 
       le chemin d'accès. 

       Par exemple, la commande suivante exécute le script 
       FindDocs.ps1 du répertoire C:\TechDocs :

           C:\TechDocs\FindDocs.ps1

       Par mesure de sécurité, Windows PowerShell n'exécute pas les 
       commandes (natives) exécutables, y compris les scripts Windows 
       PowerShell, à moins que la commande ne figure dans un chemin 
       d'accès répertorié dans la variable d'environnement Path 
       ($env:path) ou que vous ne spécifiez le chemin d'accès au 
       fichier de script. 

       Pour exécuter un script figurant dans le répertoire actif, 
       indiquez le chemin d'accès complet ou tapez un point (.) pour 
       représenter le répertoire actif.

       Par exemple, pour exécuter le fichier FindDocs.ps1 figurant 
       dans le répertoire actif, tapez :

           .\FindDocs.ps1

        

    -- Si vous ne spécifiez pas de chemin d'accès, Windows PowerShell 
       utilise l'ordre de précédence suivant lors de l'exécution des 
       commandes :

            1. Alias
            2. Function
            3. Cmdlet 
            4. Commandes Windows natives

        Par conséquent, si vous tapez " help ", Windows PowerShell 
        recherche d'abord un alias nommé " help ", puis une fonction 
        nommée " Help " et enfin une applet de commande nommée 
        " Help ". Il exécute le premier élément " help " trouvé.

        Par exemple, supposons que vous avez une fonction nommée Get-Map. 
        Vous ajoutez ou importez ensuite une applet de commande appelée 
        Get-Map. Windows PowerShell exécute par défaut la fonction 
        lorsque vous tapez " Get-Map ". 



    --	Lorsque la session contient des éléments de même type qui 
      	portent le même nom (par exemple, deux applets de commande de 
      	même nom), Windows PowerShell exécute le dernier élément 
      	ajouté à la session.

        Par exemple, supposons que vous avez une applet de commande 
        nommée Get-Date. Vous importez ensuite une applet de commande 
        appelée Get-Date. Windows PowerShell exécute par défaut l'applet 
        de commande importée en dernier lorsque vous tapez " Get-Date ".




 ÉLÉMENTS MASQUÉS et REMPLACÉS
    Ces règles impliquent que des éléments peuvent être remplacés ou 
    masqués par des éléments de même nom. 

        --  Les éléments sont " masqués " ou " ombrés " si vous 
            pouvez toujours accéder à l'élément d'origine, notamment 
            en qualifiant le nom de l'élément avec un nom de module 
            ou de composant logiciel enfichable. 

            Par exemple, si vous importez une fonction portant le 
            même nom qu'une applet de commande dans la session, 
            l'applet de commande est masquée (mais pas remplacée) car 
            elle a été importée à partir d'un composant logiciel 
            enfichable ou d'un module.
            

        --  Les éléments sont " remplacés " ou " écrasés " si vous ne 
            pouvez plus accéder à l'élément d'origine.

            Par exemple, si vous importez une variable portant le 
            même nom qu'une variable de la session, la variable 
            d'origine est remplacée et n'est plus accessible. Une 
            variable ne peut pas être qualifiée avec un nom de module.
           
            En outre, si vous tapez une fonction sur la ligne de 
            commande, puis importez une fonction de même nom, la 
            fonction d'origine est remplacée et n'est plus accessible.



 EXÉCUTION DE COMMANDES MASQUÉES
    Vous avez la possibilité d'exécuter des commandes particulières 
    en spécifiant des propriétés d'éléments qui les distinguent 
    d'autres commandes pouvant porter le même nom. 

    Vous pouvez utiliser cette méthode pour exécuter n'importe quelle 
    commande, mais elle s'avère particulièrement utile pour 
    l'exécution de commandes masquées. 

    Il est recommandé d'appliquer cette méthode lorsque vous écrivez 
    des scripts que vous prévoyez de distribuer, car il est 
    impossible de prévoir quelles commandes peuvent être présentes 
    dans la session où le script s'exécute.


    NOMS QUALIFIÉS
        Vous pouvez exécuter des commandes importées à partir d'un 
        module ou d'un composant logiciel enfichable Windows 
        PowerShell, ou bien d'une autre session, en qualifiant leur 
        nom avec le nom du module ou du composant logiciel enfichable 
        dont elles proviennent. 

        Vous pouvez qualifier des commandes, mais pas des variables 
        ou des alias.   

        Par exemple, si l'applet de commande Get-Date du composant 
        logiciel enfichable Microsoft.PowerShell.Utility est masquée 
        par un alias, une fonction ou une applet de commande portant 
        le même nom, vous pouvez l'exécuter en utilisant son nom 
        qualifié par le composant logiciel enfichable :

            Microsoft.PowerShell.Utility\Get-Date

        Pour exécuter une commande New-Map ajoutée par le module 
        MapFunctions, utilisez son nom qualifié par le module :

            MapFunctions\New-Map


        Pour rechercher le composant logiciel enfichable ou le module 
        à partir duquel une commande a été importée, utilisez le 
        format de commande Get-Command suivant :

            get-command <nom de commande> | format-list -property 
            Name, PSSnapin, Module

        Par exemple, pour rechercher la source de l'applet de 
        commande Get-Date, tapez :

            get-command get-date | format-list -property Name, 
            PSSnapin, Module

            Name     : Get-Date
            PSSnapIn : Microsoft.PowerShell.Utility
            Module   :
       

    OPÉRATEUR D'APPEL
        Vous avez également la possibilité d'utiliser l'opérateur 
        d'appel (&) pour exécuter toute commande pouvant être obtenue 
        au moyen d'une commande Get-ChildItem (l'alias est " dir "), 
        Get-Command ou Get-Module. 

        Pour exécuter une commande, placez la commande Get-Command 
        entre parenthèses et utilisez l'opérateur d'appel (&).

            &(get-command ...) 

        - or -

            &(dir ... )

        Par exemple, si vous utilisez une fonction nommée Map, qui 
        est masquée par un alias du même nom, faites appel à la 
        commande suivante pour exécuter la fonction :

            &(get-command -name map -type function) 

        - or -

            &(dir function:\map)


        Vous pouvez également enregistrer votre commande masquée dans 
        une variable pour l'exécuter plus facilement.

        Par exemple, la commande suivante enregistre la fonction Map 
        dans la variable $myMap, puis utilise l'opérateur d'appel 
        pour l'exécuter :

            $myMap = (get-command -name map -type function)

            &($myMap)


        Si une commande provient d'un module, vous pouvez utiliser le 
        format suivant pour l'exécuter :

           & <objet-PSModuleInfo> <commande>

        Par exemple, pour exécuter l'applet de commande Add-File du 
        module FileCommands, utilisez la séquence de commandes suivante :
           
           $FileCommands = get-module -name FileCommands 

           & $FileCommands Add-File
        
   

 ÉLÉMENTS REMPLACÉS
    Les éléments qui n'ont pas été importés à partir d'un module ou 
    d'un composant logiciel enfichable, tels que des fonctions, des 
    variables et des alias que vous créez dans votre session ou que 
    vous ajoutez à l'aide d'un profil, peuvent être remplacés par des 
    commandes de même nom. S'ils sont remplacés, ils ne sont plus 
    accessibles.

    Les variables et les alias sont toujours remplacés, même s'ils 
    ont été importés à partir d'un module ou d'un composant logiciel 
    enfichable, car vous ne pouvez pas utiliser d'opérateur d'appel 
    ou de nom qualifié pour les exécuter.

    Par exemple, si vous tapez une fonction Get-Map dans votre 
    session et importez une fonction appelée Get-Map, la fonction 
    d'origine est remplacée. Vous ne pouvez pas la récupérer dans la 
    session active.


   
 COMMENT ÉVITER LES CONFLITS DE NOM
    Le meilleur moyen de gérer les conflits de nom de commande 
    consiste à les empêcher. Lorsque vous nommez vos commandes, 
    utilisez un nom très spécifique ou vraisemblablement unique. 
    Par exemple, ajoutez vos initiales ou l'acronyme du nom de 
    votre société aux noms figurant dans vos commandes.

    En outre, lorsque vous importez des commandes dans votre session 
    à partir d'un module Windows PowerShell ou d'une autre session, 
    utilisez le paramètre Prefix de l'applet de commande Import-Module 
    ou Import-PSSession pour ajouter un préfixe aux noms figurant dans 
    les noms de commandes.

    Par exemple, la commande suivante évite tout conflit avec les 
    applets de commande Get-Date et Set-Date disponibles avec Windows 
    PowerShell lorsque vous importez le module DateFunctions :

        import-module -name DateFunctions -prefix ZZ

    Pour plus d'informations, consultez Import-Module et 
    Import-PSSession. 


VOIR AUSSI
    about_Path_Syntax
    about_Aliases
    about_Functions
    Alias (fournisseur)
    Function (fournisseur)
    Get-Command
    Import-Module
    Import-PSSession




Table des matières