PowerShell equivalente ao comando Unix `what`?

69

O PowerShell tem um equivalente ao whichcomando encontrado na maioria (se não em todos) dos shell do Unix?

Há várias vezes que eu gostaria de saber a localização de algo que estou executando na linha de comando. No Unix eu apenas faço which <command>, e isso me diz. Não consigo encontrar um equivalente no PowerShell.

Herms
fonte

Respostas:

71

Isso foi solicitado e respondido no Stack Overflow: Equivalente ao comando * Nix 'what' no PowerShell?

O primeiro alias que fiz quando comecei a personalizar meu perfil no PowerShell foi 'what'.

Novo alias que get-command

Para adicionar isso ao seu perfil, digite o seguinte:

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

O `n no início da última linha é garantir que ele comece como uma nova linha.

Nagul
fonte
35

No PowerShell 3.0, você pode fazer

(Get-Command cmd).Path

O que também tem o benefício sobre o Get-Command de baunilha de retornar um System.Stringpara que você obtenha uma saída de linha única limpa * nixy como você pode estar acostumado. Usando o alias do gcm, podemos reduzir para 11 caracteres.

(gcm cmd).Path
FLGMwt
fonte
4
Se Get-Commandencontrar vários resultados, ele retornará uma matriz. Além disso, se o comando encontrado não for um executável, Pathserá indefinido ( $null). Isso torna a resposta aqui impraticável para uso geral sem grandes modificações. Para um bom exemplo de ambos os casos, tente Get-Command where.
Jpmc26
1
Essa deve ser a resposta aceita, pois na verdade indica qual é o equivalente do Powershell ao comando * NIX, em wherevez de ensinar como definir aliases no Powershell, que não é o título da pergunta.
mastazi
3
@mastazi: Mas isso falha para os componentes internos, o que é uma regressão em comparação com, por exemplo, o zsh 's which. ( wherea propósito, na verdade, é um utilitário do Windows que pode fazer várias coisas diferentes, uma das quais aproxima aproximadamente a procura de um comando ao longo do PATH.) Além disso, não há nada de errado com uma resposta que explique como fazer o que foi solicitado e também outra coisa um pouco mais envolvida construída sobre isso.
SamB 29/11
7

Também respondida em 2008: Existe um equivalente de 'what' na linha de comando do Windows?

Experimente o wherecomando se você instalou um Resource Kit.

Partes mais importantes da resposta:

O Windows Server 2003 e versões posteriores fornecem o WHEREcomando que faz parte do que faz, embora corresponda a todos os tipos de arquivos, não apenas aos comandos executáveis.

[recorte]

No Windows PowerShell, você deve digitar where.exe.

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