Je n'arrive pas à trouver quoi que ce soit à propos d'un équivalent de Powershell de la where
commande cmd
. Dois-je simplement l'appeler cmd
ou y a-t-il quelque chose de plus élégant dans PS?
Je n'arrive pas à trouver quoi que ce soit à propos d'un équivalent de Powershell de la where
commande cmd
. Dois-je simplement l'appeler cmd
ou y a-t-il quelque chose de plus élégant dans PS?
Réponses:
Utilisez la Get-Command
commandlet en lui donnant le nom de l’exécutable. Il renseigne la propriété Path de l'objet renvoyé (de type ApplicationInfo ) avec le chemin d'accès entièrement résolu à l'exécutable.
# ~> (get-command notepad.exe).Path
C:\WINDOWS\system32\notepad.exe
gcm
lieu de taper le Get-Command
mot en entier à chaque fois
gcm notepad
a fonctionné parfaitement pour moi quand je veux juste voir quel fichier j'appelle.
Si vous souhaitez simplement disposer de la même fonctionnalité sans invoquer cmd, vous pouvez appeler à where.exe
partir de powershell, tant que cela se C:\Windows\System32
trouve sur votre chemin. La commande where
(sans le fichier .exe) est associée à un alias. Indiquez Where-Object
donc simplement le nom complet.
PS C:\Users\alec> where
cmdlet Where-Object at command pipeline position 1
...
PS C:\Users\alec> where.exe
The syntax of this command is:
WHERE [/R dir] [/Q] [/F] [/T] pattern...
Get-ChildItem C:\SomeDir -Recurse *.dll
C'est à peu près ce que l'ancien where.exe fait ... y avait-il une fonctionnalité plus spécifique que vous essayez d'imiter?
Edit: En réponse au commentaire de Joshua ... oh, vous voulez aussi rechercher vos variables d'environnement PATH? Aucun problème.
Foreach($_ In $Env:Path -Split ';')
{
Get-ChildItem $_ -Recurse *.dll
}
oh, you want to search your PATH environment variables too?
Euh, oui, c'est le point entier à where
, sinon vous pouvez simplement utiliser dir
. Der. :-P
where
n'est pas une cmd
commande intégrée . Il s'agit d'une application autonome ( where.exe
), de sorte que PowerShell à proprement parler n'a pas besoin d'être remplacé.
Alors, pourquoi ne where
fonctionne pas dans PowerShell? Il semble ne rien faire:
PS C:\> where where
PS C:\>
Par défaut, l' where
alias est associé à une applet de commande PS intégrée.
PS C:\> get-help where
NAME
Where-Object
...
ALIASES
where
?
C'est bon à savoir, mais y a-t-il un moyen d'éviter d'appeler where-object
lorsque vous essayez d'appeler where.exe
?
La réponse est oui.
Option 1
Appeler where.exe
avec extension. (Il s'agit d'un moyen pratique de résoudre d'autres problèmes d'aliasing et de priorisation des extensions de fichiers.)
PS C:\> where.exe where
C:\Windows\System32\where.exe
Option 2
Supprimer l'alias.
PS C:\> Remove-Item alias:\where -Force
PS C:\> where where
C:\Windows\System32\where.exe
Notes de côté
La réponse de zdan propose d'utiliser Get-Command
l'alternative. Bien qu'il soit un peu plus détaillé (même si vous utilisez l' gcm
alias par défaut ), il a des fonctionnalités plus riches que where.exe
. Si vous utilisez un script, faites attention aux différences subtiles entre les deux. Par exemple, where.exe
renvoie toutes les correspondances, alors que Get-Command
ne renvoie que le premier résultat à moins d'inclure le -TotalCount
paramètre facultatif .
PS C:\> where.exe notepad
C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe
PS C:\> (gcm notepad).Path
C:\WINDOWS\system32\notepad.exe
PS C:\> (gcm notepad -TotalCount 5).Path
C:\WINDOWS\system32\notepad.exe
C:\WINDOWS\notepad.exe
PS C:\>
Enfin, si vous supprimez l' where
alias par défaut , vous pouvez également envisager de le réaffecter en tant qu'alias Get-Command
. (Mais cela aurait probablement un avantage douteux.)
PS C:\> Set-Alias where Get-Command
PS C:\> where notepad
CommandType Name Version Source
----------- ---- ------- ------
Application notepad.exe 10.0.15... C:\WINDOWS\system32\notepad.exe
PS C:\> (where notepad).Path
C:\WINDOWS\system32\notepad.exe
PS C:\>