Je n'arrive pas à trouver quoi que ce soit à propos d'un équivalent de Powershell de la wherecommande cmd. Dois-je simplement l'appeler cmdou 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 wherecommande cmd. Dois-je simplement l'appeler cmdou y a-t-il quelque chose de plus élégant dans PS?
Réponses:
Utilisez la Get-Commandcommandlet 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
gcmlieu de taper le Get-Commandmot en entier à chaque fois
gcm notepada 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.exepartir de powershell, tant que cela se C:\Windows\System32trouve sur votre chemin. La commande where(sans le fichier .exe) est associée à un alias. Indiquez Where-Objectdonc 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
wheren'est pas une cmdcommande 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 wherefonctionne pas dans PowerShell? Il semble ne rien faire:
PS C:\> where where
PS C:\>
Par défaut, l' wherealias 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-objectlorsque vous essayez d'appeler where.exe?
La réponse est oui.
Option 1
Appeler where.exeavec 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-Commandl'alternative. Bien qu'il soit un peu plus détaillé (même si vous utilisez l' gcmalias 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.exerenvoie toutes les correspondances, alors que Get-Commandne renvoie que le premier résultat à moins d'inclure le -TotalCountparamè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' wherealias 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:\>