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