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