Obtenha programaticamente o caminho completo para o binário no PowerShell (que, onde, Get-Command)

Obtenha programaticamente o caminho completo para o binário no PowerShell (que, onde, Get-Command)

Como obtenho o caminho absoluto para um determinado binário e armazeno-o em uma variável?

Qual é o equivalente ao seguinte para Linux Bash no Windows Powershell?

user@disp985:~$ path=`which gpg`
user@disp985:~$ echo $path
/usr/bin/gpg
user@disp985:~$ 

user@disp985:~$ $path
gpg: keybox '/home/user/.gnupg/pubring.kbx' created
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
gpg: Go ahead and type your message ...

No Windows Powershell, existe Get-Command, mas a saída dificilmente é trivial para analisar programaticamente para um script.

PS C:\Users\user> Get-Command gpg.exe
 
CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     gpg.exe                                            2.2.28.... C:\Program Files (x86)\Gpg4win\..\GnuP...
 
 
PS C:\Users\user>

Como posso determinar programaticamente o caminho completo para um determinado binário no Windows Powershell, armazená-lo em uma variável e executá-lo?

Responder1

Para o comando de exemplo fornecido pela pergunta do OP:

PS C:\Users\user> Get-Command gpg.exe
 
CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     gpg.exe                                            2.2.28.... C:\Program Files (x86)\Gpg4win\..\GnuP...
 
 
PS C:\Users\user>

Você pode extrair o campo "Fonte" com a seguinte sintaxe

PS C:\Users\user> $(Get-Command gpg.exe).Source
C:\Program Files (x86)\Gpg4win\..\GnuPG\bin\gpg.exe

Então você também pode armazená-lo em uma variável e executá-lo com um E comercial (&) precedendo a variável

PS C:\Users\user> $path=$(Get-Command gpg.exe).Source
PS C:\Users\user> echo $path
C:\Program Files (x86)\Gpg4win\..\GnuPG\bin\gpg.exe
PS C:\Users\user> & $path
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
gpg: Go ahead and type your message ...

informação relacionada