Программно получить полный путь к двоичному файлу в PowerShell (which, where, Get-Command)

Программно получить полный путь к двоичному файлу в PowerShell (which, where, Get-Command)

Как получить абсолютный путь к заданному двоичному файлу и сохранить его в переменной?

Что является эквивалентом следующего для Linux Bash в 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 ...

В Windows Powershell есть Get-Command, но вывод вряд ли можно программно проанализировать для создания скрипта.

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>

Как программно определить полный путь к заданному двоичному файлу в Windows Powershell, сохранить его в переменной и выполнить?

решение1

Для примера команды, предоставленной в вопросе 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>

Вы можете извлечь поле «Источник» с помощью следующего синтаксиса

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

Затем вы также можете сохранить его в переменной и выполнить его, поставив перед переменной амперсанд (&).

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 ...

Связанный контент