PowerShell でバイナリへのフルパスをプログラム的に取得する (which、where、Get-Command)

PowerShell でバイナリへのフルパスをプログラム的に取得する (which、where、Get-Command)

特定のバイナリへの絶対パスを取得して変数に保存するにはどうすればよいですか?

Windows Powershell の Linux Bash の次のものに相当するものは何ですか?

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

関連情報