¿PowerShell equivalente al comando `which` de Unix?

69

¿PowerShell tiene un equivalente al whichcomando que se encuentra en la mayoría (si no todos) los shells de Unix?

Hay varias veces que me gustaría saber la ubicación de algo que estoy ejecutando desde la línea de comandos. En Unix solo lo hago which <command>, y me dice. No puedo encontrar un equivalente en PowerShell.

Herms
fuente

Respuestas:

71

Esto fue preguntado y respondido en Stack Overflow: ¿ Equivalente de * Nix 'what' command en PowerShell?

El primer alias que hice una vez que comencé a personalizar mi perfil en PowerShell fue 'which'.

Nuevo alias que obtiene el comando

Para agregar esto a su perfil, escriba esto:

"` nNew-Alias ​​which get-command "| add-content $ profile

La `n al comienzo de la última línea es asegurar que comenzará como una nueva línea.

nagul
fuente
35

A partir de PowerShell 3.0, puede hacer

(Get-Command cmd).Path

Lo que también tiene el beneficio sobre Vanilla Get-Command de devolver un System.Stringmodo para que obtenga una salida de línea única * nixy limpia como está acostumbrado. Usando el alias gcm, podemos reducirlo a 11 caracteres.

(gcm cmd).Path
FLGMwt
fuente
44
Si Get-Commandencuentra varios resultados, devuelve una matriz. Además, si el comando que encuentra no es un ejecutable, Pathestá indefinido ( $null). Esto hace que la respuesta aquí sea poco práctica para uso general sin grandes modificaciones. Para un buen ejemplo de ambos casos, intente Get-Command where.
jpmc26
1
Esta debería ser la respuesta aceptada, ya que en realidad le dice cuál es el equivalente de Powershell del comando * NIX en wherelugar de enseñarle cómo establecer alias en Powershell, que no es el título de la pregunta.
mastazi
3
@mastazi: Pero eso falla para los builtins, que es una regresión en comparación con, por ejemplo, zsh 's which. ( wherepor cierto, en realidad es una utilidad de Windows que puede hacer varias cosas diferentes, una de las cuales se aproxima a la búsqueda de un comando junto con el PATH.) Además, no hay nada de malo en una respuesta que explica cómo hacer lo que se le pidió y También otra cosa un poco más complicada construida sobre eso.
SamB
7

También respondió en 2008: ¿Hay un equivalente de 'cuál' en la línea de comandos de Windows?

Pruebe el wherecomando si ha instalado un Kit de recursos.

Partes más importantes de la respuesta:

Windows Server 2003 y versiones posteriores proporcionan el WHEREcomando que hace algo de lo que hace, aunque coincide con todos los tipos de archivos, no solo los comandos ejecutables.

[recorte]

En Windows PowerShell debe escribir where.exe.

Anónimo
fuente
3
function which([string]$cmd) {gcm -ErrorAction "SilentlyContinue" $cmd | ft Definition}
hshen
fuente