Equivalente al "dónde" de cmd en powershell

Respuestas:

59

Use el Get-Commandcomando pasando el nombre del ejecutable. Rellena la propiedad Path del objeto devuelto (de tipo ApplicationInfo ) con la ruta completamente resuelta al ejecutable.

# ~> (get-command notepad.exe).Path
C:\WINDOWS\system32\notepad.exe
zdan
fuente
8
Si te encuentras usando esto mucho, puedes abreviar el comando ya que en gcmlugar de escribir la Get-Commandpalabra completa cada vez
Moshe Katz
@MosheKatz ¡Gracias! gcm notepadha funcionado perfectamente para mí cuando solo quiero ver a qué archivo estoy llamando.
Shawn Wang
1
Y así, niños y niñas, es cómo complican demasiado las cosas útiles que ya estaban bien. Si no está roto, no lo arregles.
AFP_555
Muchas gracias por este comando. Puedo Agregar-Tipo sin codificar la ruta.
Jason TEPOORTEN
22

Si solo busca tener la misma funcionalidad sin invocar cmd, puede llamar where.exedesde powershell, siempre que C:\Windows\System32esté en su camino. El comando where(sin el .exe) tiene un alias Where-Object, así que solo especifique el nombre completo.

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...
trapeado
fuente
8

Get-ChildItem C:\SomeDir -Recurse *.dll

Eso es más o menos lo que hace el viejo where.exe ... ¿había una funcionalidad más específica que intentas imitar?

Editar: En respuesta al comentario de Joshua ... oh, ¿también quieres buscar en tus variables de entorno PATH? No hay problema.

Foreach($_ In $Env:Path -Split ';')
{
    Get-ChildItem $_ -Recurse *.dll
}
Ryan Ries
fuente
1
"where" también busca en la RUTA
Joshua McKinnon
3
oh, you want to search your PATH environment variables too? Um, sí, ese es el punto entero que where, de lo contrario sólo se puede utilizar dir. Der. :-P
Synetech
4

whereNo es un cmdcomando incorporado . Es una aplicación independiente ( where.exe), por lo que, estrictamente hablando, PowerShell no "necesita un reemplazo".

Entonces, ¿por qué no wherefunciona en PowerShell? Parece no hacer nada:

PS C:\> where where
PS C:\>

De forma predeterminada, wheretiene un alias para un cmdlet PS incorporado.

PS C:\> get-help where

NAME
    Where-Object
...
ALIASES
    where
    ?

Bueno, es bueno saberlo, pero ¿hay alguna manera de evitar llamar where-objectcuando intentas llamar where.exe?

La respuesta es sí.

Opción 1

Llamada where.execon extensión. (Esta es una forma práctica de solucionar otros problemas de alias y de priorización de extensiones de archivo).

PS C:\> where.exe where
C:\Windows\System32\where.exe

opcion 2

Elimina el alias.

PS C:\> Remove-Item alias:\where -Force
PS C:\> where where
C:\Windows\System32\where.exe

Notas al margen

La respuesta de zdan propone usar Get-Commandcomo alternativa. Aunque es un poco más detallado (incluso cuando se usa el gcmalias predeterminado ), tiene una funcionalidad más rica que where.exe. Si se usa en secuencias de comandos, preste atención a las sutiles diferencias entre los dos. Por ejemplo, where.exedevuelve todas las coincidencias, mientras que Get-Commandsolo devuelve el primer resultado a menos que incluya el -TotalCountparámetro opcional .

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:\>

Y finalmente, si elimina el wherealias predeterminado , también podría considerar reasignarlo como un alias Get-Command. (Pero esto probablemente sería de dudoso beneficio).

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:\>
Desilusionado
fuente