Como pergunto ao PowerShell onde está alguma coisa?
Por exemplo, "qual bloco de notas" e ele retorna o diretório em que o bloco de notas.exe é executado de acordo com os caminhos atuais.
unix
powershell
command
DevelopingChris
fonte
fonte
Get-Command <command> | Format-Table Path, Name
para que eu possa obter o caminho onde o comando fica também.select -expandproperty Path
.(gcm <command>).definition
para obter apenas o (s) caminho (s).gcm
é o alias padrão paraGet-Command
. Você também pode usar curingas, por exemplo:(gcm win*.exe).definition
.Aqui está um equivalente * nix real, ou seja, fornece saída no estilo * nix.
Apenas substitua pelo que você está procurando.
Quando você o adiciona ao seu perfil, você deseja usar uma função em vez de um alias, porque não pode usar aliases com pipes:
Agora, quando você recarrega seu perfil, pode fazer o seguinte:
fonte
okta
que aponta para um script do Powershell chamadookta.ps1
que não está no meu$PATH
. O uso da resposta aceita retorna o nome do script (okta -> okta.ps1
). Isso está bom, mas não me diz a localização deokta.ps1
. Usar esta resposta, no entanto, me dá todo o caminho (C:\Users\blah\etc\scripts\okta.ps1
). Então, um de mim.Normalmente, apenas digito:
ou
gcm é o alias padrão para Get-Command.
No meu sistema, o gcm note * gera:
Você obtém o diretório e o comando que correspondem ao que você está procurando.
fonte
gcm note* | select CommandType, Name, Definition
. Se você executá-lo com freqüência, provavelmente deve envolvê-lo em uma função.Tente este exemplo:
fonte
(gcm py.exe).path
Minha proposição para a função Que:
fonte
Uma partida rápida e suja com o Unix
which
éMas ele retorna várias linhas, se existirem, e então se torna
fonte
where.exe where
devo dizer-lheC:\Windows\System32\where.exe
where.exe
é equivalente awhich -a
, pois devolverá todos os executáveis correspondentes, não apenas o primeiro a ser executado. Ou seja,where.exe notepad
dác:\windows\notepad.exe
ec:\windows\system32\notepad.exe
. Portanto, isso não é particularmente adequado para o formulário$(which command)
. (Outro problema é que ele imprimirá uma mensagem de erro útil e agradável se o comando não for encontrado, o que também não será muito bom$()
- que pode ser remediado/Q
, mas não como um alias.)where
parece procurar a variável PATH do sistema e não a variável PATH do shell atual. Veja esta perguntaIsso parece fazer o que você deseja (eu o encontrei em http://huddledmasses.org/powershell-find-path/ ):
fonte
Verifique este PowerShell Which .
O código fornecido lá sugere o seguinte:
fonte
Eu gosto
Get-Command | Format-List
, ou mais baixo, de usar aliases para os dois e apenas parapowershell.exe
:Você pode encontrar aliases como este:
A conclusão da guia funciona com
gcm
.fonte
Tente o
where
comando no Windows 2003 ou posterior (ou Windows 2000 / XP, se você instalou um Resource Kit).BTW, isso recebeu mais respostas em outras perguntas:
Existe um equivalente de 'what' no Windows?
PowerShell equivalente ao
which
comando Unix ?fonte
where
aliases aoWhere-Object
commandlet no Powershell, portanto, digitarwhere <item>
um prompt do Powershell não produz nada. Esta resposta é, portanto, completamente incorreta - conforme observado na resposta aceita na primeira pergunta vinculada, para obter o DOSwhere
, você precisa digitarwhere.exe <item>
.Eu tenho essa
which
função avançada no meu perfil do PowerShell:fonte
Usar:
Ou esta versão, chamando o comando where original.
Esta versão também funciona melhor, porque não se limita aos arquivos bat:
fonte
Se você deseja um comamnd que aceite entrada do pipeline ou como paramater, tente o seguinte:
copie e cole o comando no seu perfil (
notepad $profile
).Exemplos:
fonte