※記事内に商品プロモーションを含むことがあります。
はじめに
PowerShellでパスが通ったプログラムの場所を表示するにはGet-Command
(またはgcm
)コマンドレットを使います(Linuxのwhich
, where
コマンドに相当)。
gcm
にオプションを付けない場合、実際に実行される実体1個の場所が表示されます。プログラムの場所を全て表示する場合には-All
オプションを付けます。
例1: メモ帳 (notepad.exe) の実際に実行される実体の場所を表示する。
例2: パスが通ったフォルダにあるメモ帳 (notepad.exe) の場所を全て表示する。
Linuxコマンドとの対応は以下のようになります。
-All
オプションなし:Linuxのwhich
コマンドに相当
-All
オプションあり:Linuxのwhere
コマンドに相当
以降では、gcm
コマンドレットでプログラムの場所を表示する方法について詳しく解説します。
環境
動作を確認した環境は以下の通りです。
- Windows 10 Home 21H1
- PowerShell 5.1.19041.1320
なお、PowerShellのバージョンは、以下のコマンドで表示されるPSVersion
の値から確認できます。
Get-Command
Get-Command
(gcm
)コマンドレットの使い方を示します。
基本的な使い方
gcm
の後ろに、場所を検索したいコマンドを追加します(.exe
はなくてもよい)。
実行すると、実際に動く実体のプログラムとその場所が表示されます。
メモ帳 (notepad.exe) の場合の例を示します。
1
2
3
4
5
|
PS > gcm notepad
CommandType Name Version Source
----------- ---- ------- ------
Application notepad.exe 10.0.19... C:\WINDOWS\system32\notepad.exe
|
コマンドの実体を全て検索する
gcm
に何もオプションを付けない場合、実際に動く実体が1つだけ表示されます。
パスが通っているフォルダにある同じ名前のプログラムを全て探すには、-All
オプションを追加します。
1
2
3
4
5
|
PS > gcm notepad -All
CommandType Name Version Source
----------- ---- ------- ------
Application notepad.exe 10.0.19... C:\WINDOWS\system32\notepad.exe
Application notepad.exe 10.0.19... C:\WINDOWS\notepad.exe
|
-All
オプションを付けなかった場合と異なり、notepad.exe
が2つ表示されました。
検索結果の詳細を表示する
試しにgcm
自身の場所を調べてみます。
1
2
3
4
5
|
PS > gcm gcm
CommandType Name Version Source
----------- ---- ------- ------
Alias gcm -> Get-Command
|
このように、一部のコマンドではSource
に場所が表示されません。
このような場合は、検索するコマンドにエイリアスを使用せず、さらに後ろにパイプラインでfl
(Format-List
のエイリアス)をつなげます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
PS > gcm Get-Command | fl
Name : Get-Command
CommandType : Cmdlet
Definition :
Get-Command [[-ArgumentList] <Object[]>] [-Verb <string[]>] [-Noun <string[]>] [-Module <string[]>] [-F
ullyQualifiedModule <ModuleSpecification[]>] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All] [-
ListImported] [-ParameterName <string[]>] [-ParameterType <PSTypeName[]>] [<CommonParameters>]
Get-Command [[-Name] <string[]>] [[-ArgumentList] <Object[]>] [-Module <string[]>] [-FullyQualifiedModu
le <ModuleSpecification[]>] [-CommandType <CommandTypes>] [-TotalCount <int>] [-Syntax] [-ShowCommandIn
fo] [-All] [-ListImported] [-ParameterName <string[]>] [-ParameterType <PSTypeName[]>] [<CommonParamete
rs>]
Path :
AssemblyInfo :
DLL : C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\
System.Management.Automation.dll
HelpFile : System.Management.Automation.dll-Help.xml
ParameterSets : {[[-ArgumentList] <Object[]>] [-Verb <string[]>] [-Noun <string[]>] [-Module <string[]>] [-FullyQualifi
edModule <ModuleSpecification[]>] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All] [-ListImporte
d] [-ParameterName <string[]>] [-ParameterType <PSTypeName[]>] [<CommonParameters>], [[-Name] <string[]
>] [[-ArgumentList] <Object[]>] [-Module <string[]>] [-FullyQualifiedModule <ModuleSpecification[]>] [-
CommandType <CommandTypes>] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All] [-ListImported] [-P
arameterName <string[]>] [-ParameterType <PSTypeName[]>] [<CommonParameters>]}
ImplementingType : Microsoft.PowerShell.Commands.GetCommandCommand
Verb : Get
Noun : Command
|
これ以上深入りしませんが、Get-Command
の本体はSystem.Management.Automation.dll
に関連しているようです。
Linuxとコマンドプロンプトに関する補足
LinuxとWindowsで似たコマンドが多いので、違いをまとめました、
Linux
which
: 実際に動くプログラムを探す。
where
: その名前のプログラムを全て探す。
Windowsコマンドプロンプト
where
: その名前のファイル(プログラムを含む)を全て探す(Linuxのfind
に相当)。
- Linuxの
which
に相当するコマンドは無し。
Windows PowerShell
gcm
: 実際に動く実体を探す。-All
オプションで全て探す。Get-Command
のエイリアス。
where
:(パイプラインの後ろで使って)オブジェクトをフィルタする。Where-Object
のエイリアス。
参考