JavaScriptを有効にしてください

PowerShellのGet-ChildItem (gcm) でパスが通ったプログラムの場所を調べる

 ·   3 min read

※記事内に商品プロモーションを含むことがあります。

はじめに

PowerShellでパスが通ったプログラムの場所を表示するにはGet-Command(またはgcm)コマンドレットを使います(Linuxのwhich, whereコマンドに相当)。

gcmにオプションを付けない場合、実際に実行される実体1個の場所が表示されます。プログラムの場所を全て表示する場合には-Allオプションを付けます。

例1: メモ帳 (notepad.exe) の実際に実行される実体の場所を表示する。

1
PS > gcm notepad

例2: パスが通ったフォルダにあるメモ帳 (notepad.exe) の場所を全て表示する。

1
PS > gcm notepad -All

Linuxコマンドとの対応は以下のようになります。

  • -Allオプションなし:Linuxのwhichコマンドに相当
  • -Allオプションあり:Linuxのwhereコマンドに相当

以降では、gcmコマンドレットでプログラムの場所を表示する方法について詳しく解説します。

環境

動作を確認した環境は以下の通りです。

  • Windows 10 Home 21H1
  • PowerShell 5.1.19041.1320

なお、PowerShellのバージョンは、以下のコマンドで表示されるPSVersionの値から確認できます。

1
PS > $PSVersionTable

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に場所が表示されません。
このような場合は、検索するコマンドにエイリアスを使用せず、さらに後ろにパイプラインでflFormat-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のエイリアス。

参考

シェアする

Helve
WRITTEN BY
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

サイト内検索