Comment demander à PowerShell où se trouve quelque chose?
Par exemple, "quel bloc-notes" et il renvoie le répertoire à partir duquel le bloc-notes est exécuté en fonction des chemins d'accès actuels.
unix
powershell
command
DevelopingChris
la source
la source
Get-Command <command> | Format-Table Path, Name
donc je peux aussi trouver le chemin où se trouve la commande.select -expandproperty Path
.(gcm <command>).definition
pour obtenir le (s) chemin (s) uniquement.gcm
est l'alias par défaut deGet-Command
. Vous pouvez également utiliser des caractères génériques, par exemple:(gcm win*.exe).definition
.Voici un véritable équivalent * nix, c'est-à-dire qu'il donne une sortie de style * nix.
Remplacez simplement par ce que vous cherchez.
Lorsque vous l'ajoutez à votre profil, vous souhaiterez utiliser une fonction plutôt qu'un alias car vous ne pouvez pas utiliser d'alias avec des canaux:
Maintenant, lorsque vous rechargez votre profil, vous pouvez le faire:
la source
okta
qui pointe vers un script Powershell nomméokta.ps1
qui n'est pas sur mon$PATH
. L'utilisation de la réponse acceptée renvoie le nom du script (okta -> okta.ps1
). C'est OK mais ça ne me dit pas oùokta.ps1
. L'utilisation de cette réponse, cependant, me donne le chemin complet (C:\Users\blah\etc\scripts\okta.ps1
). Donc +1 de moi.Je tape habituellement juste:
ou
gcm est l'alias par défaut de Get-Command.
Sur mon système, gcm note * affiche:
Vous obtenez le répertoire et la commande correspondant à ce que vous recherchez.
la source
gcm note* | select CommandType, Name, Definition
. Si vous l'exécutez souvent, vous devriez probablement l'envelopper dans une fonction.Essayez cet exemple:
la source
(gcm py.exe).path
Ma proposition pour la fonction Which:
la source
Une correspondance rapide et sale avec Unix
which
estMais il renvoie plusieurs lignes si elles existent, alors cela devient
la source
where.exe where
devrait vous direC:\Windows\System32\where.exe
where.exe
est équivalent àwhich -a
, car il rendra tous les exécutables correspondants, pas seulement le premier à exécuter. Autrement dit,where.exe notepad
donnec:\windows\notepad.exe
etc:\windows\system32\notepad.exe
. Ce n'est donc pas particulièrement adapté à la forme$(which command)
. (Un autre problème est qu'il affichera un joli message d'erreur utile si la commande n'est pas trouvée, qui ne se développera pas non plus correctement$()
- cela peut être résolu/Q
, mais pas comme un alias.)where
semble rechercher la variable PATH système et non la variable PATH shell actuelle. Voir cette questionCela semble faire ce que vous voulez (je l'ai trouvé sur http://huddledmasses.org/powershell-find-path/ ):
la source
Vérifiez ce PowerShell qui .
Le code fourni ici suggère ceci:
la source
J'aime
Get-Command | Format-List
, ou plus court, utiliser des alias pour les deux et uniquement pourpowershell.exe
:Vous pouvez trouver des alias comme celui-ci:
La complétion des onglets fonctionne avec
gcm
.la source
Essayez la
where
commande sous Windows 2003 ou version ultérieure (ou Windows 2000 / XP si vous avez installé un kit de ressources).BTW, cela a reçu plus de réponses dans d'autres questions:
Existe-t-il un équivalent de «lequel» sous Windows?
PowerShell équivalent à la
which
commande Unix ?la source
where
alias duWhere-Object
commandlet dans Powershell, donc la saisiewhere <item>
d'une invite Powershell ne donne rien. Cette réponse est donc complètement incorrecte - comme indiqué dans la réponse acceptée dans la première question liée, pour obtenir le DOSwhere
, vous devez taperwhere.exe <item>
.J'ai cette
which
fonction avancée dans mon profil PowerShell:la source
Utilisation:
Ou cette version, en appelant la commande where d'origine.
Cette version fonctionne également mieux, car elle n'est pas limitée aux fichiers bat:
la source
Si vous voulez un comamnd qui accepte les entrées du pipeline ou en tant que paramètre, vous devriez essayer ceci:
copiez-collez la commande dans votre profil (
notepad $profile
).Exemples:
la source