【Get-Process】PowerShellで確認できる?プロセスの実行ユーザとファイルバージョン

こんにちは。チェシャ男です。(-皿-)

今回は、

【PowerShell でプロセスの実行ユーザとファイルバージョンを確認する方法】

についてご紹介します。

Get-Process ではプロセスのリソース情報以外に「実行ユーザ」や実行ファイルの「バージョン」について確認することができます。

実行ユーザを確認する ”-IncludeUserName” オプションを使用するためには PowerShell v4.0 以降を使用している必要があります。

実行中プロセスの基本的な確認方法についてはこちら↓の記事をご参考ください。

[blogcard url=”https://cheshire-wara.com/powershell/ps-cmdlets/system-service/get-process/”]

 

オプションを使ってプロセスの情報を確認する

実行中のプロセスを取得するコマンドレット

Get-Process

の使い方は以下をご覧ください。

【コマンドレット】

Get-Process

【オプション】

パターン1(プロセス名から取得)
-Name               <プロセス名(複数可)>
-ComputerName <マシン名やIPアドレス>
-Module
-FileVersionInfo

パターン2(プロセスIDから取得)
-Id                     <プロセスのID(複数可)>
-ComputerName <マシン名やIPアドレス>
-Module
-FileVersionInfo

パターン3(プロセスオブジェクトから取得)
-InputObject       <プロセスのオブジェクト>
-ComputerName <マシン名やIPアドレス>
-Module
-FileVersionInfo

[v4,v5以降]
-IncludeUserName

【入力】

System.String[] System.Int32[] System.Diagnostics.Process[]

【出力】

System.Diagnostics.ProcessModule
System.Diagnostics.FileVersionInfo
System.Diagnostics.Process

【エイリアス】

ps
gps

今回は赤色で示した ”-IncludeUserName” ”-FileVersionInfo” をメインに解説します。

-IncludeUserName オプションで実行ユーザを確認する

コマンドレットの説明にあるように Get-Process には “-IncludeUserName” オプションがあります。

この “-IncludeUserName” オプションは PowerShell v4.0 で新たに追加されたオプションであり、これまで取得できなかった「実行ユーザ」を取得することが可能となりました。

ただし、このオプションは「実行ユーザでフィルターする」のではなく「取得するプロセス一覧に実行ユーザ情報を付加する」という点に注意です。

実行方法は

Get-Process  -IncludeUserName

という風にオプションを指定するだけです。

実行結果を見てみましょう。

PS C:\work> Get-Process -IncludeUserName

Handles      WS(K) VM(M)   CPU(s)     Id UserName          ProcessName
-------      ----- -----   ------     -- --------          -----------
     77       3648    35     0.00   1696 NT AUTHORITY\S... armsvc
    150      12236    78     0.19   1936 CHESHIRE-PC\hoge  conhost
    634       5872   110     0.42    500 NT AUTHORITY\S... csrss
    610      18768   178    25.60    552 NT AUTHORITY\S... csrss
    103       5964    58     0.06   3520 CHESHIRE-PC\hoge  dwm
   1287     102972   422   128.37   3544 CHESHIRE-PC\hoge  explorer
     99       5092    42     0.03   1792 NT AUTHORITY\S... HeciServer
      0         24     0               0                   Idle
    957     195476   494   120.85   5212 CHESHIRE-PC\hoge  iexplore
    637      41784   211     9.28   5696 CHESHIRE-PC\hoge  iexplore
    743     150352   377     8.36   5748 CHESHIRE-PC\hoge  iexplore
    271      12364   163     0.33   3672 CHESHIRE-PC\hoge  IMECMNT
     68       3472    20     0.02   1744 NT AUTHORITY\S... IMEDICTUPDATE
     64       3800    26     0.00   1836 NT AUTHORITY\S... IPROSetMonitor
    107       8388    76     0.05   3704 CHESHIRE-PC\hoge  iusb3mon
     86       4260    27     0.00   1872 NT AUTHORITY\S... Jhi_service
    199      11548    74     0.20   3760 CHESHIRE-PC\hoge  jusched
    135       5660    37     0.08   1900 NT AUTHORITY\S... LMS
    974      13000    40    11.33    644 NT AUTHORITY\S... lsass
    215       5248    26     0.19    660 NT AUTHORITY\S... lsm
     78       4488    45     0.03   5160 CHESHIRE-PC\hoge  MsSpellCheckingFacility
    140      12152    75     1.03   2328 CHESHIRE-PC\hoge  notepad
    435      50792   217     0.41   4256 CHESHIRE-PC\hoge  powershell
    113      13996    82     0.08    720 CHESHIRE-PC\hoge  sakura
   1383      28484   139     3.29   2816 NT AUTHORITY\S... SearchIndexer
    239       7632    29     2.62    600 NT AUTHORITY\S... services
    522       8196   125     8.13   2300                   Smc
     37        960     4     0.25    372 NT AUTHORITY\S... smss
    387      12672    88     0.80   1560 NT AUTHORITY\S... spoolsv
    251      33784   150    13.67   3032 CHESHIRE-PC\hoge  StikyNot
    389       7764    35     6.54    768 NT AUTHORITY\S... svchost
    330       7444    33     1.00    848 NT AUTHORITY\N... svchost
    569      16004    73     3.00    948 NT AUTHORITY\L... svchost
    506      11756    67     1.12   1004 NT AUTHORITY\S... svchost
    401      18044    70     1.62   1032 NT AUTHORITY\L... svchost
   1099      27172    97     2.98   1068 NT AUTHORITY\S... svchost
    632      15768    90     1.97   1420 NT AUTHORITY\N... svchost
    324      14516    62     0.80   1588 NT AUTHORITY\L... svchost
    161       4572    25     0.25   3772 NT AUTHORITY\L... svchost
    775        744     3    36.24      4                   System
    320      20236   123     3.07   3476 CHESHIRE-PC\hoge  taskhost
    352      12060    67     0.36   2756 NT AUTHORITY\S... UNS
    145       7012    52     0.05   1304 NT AUTHORITY\S... vmware-usbarbitrator
     87       4696    43     0.14    560 NT AUTHORITY\S... wininit
    134       7704    51     0.42    632 NT AUTHORITY\S... winlogon
    303       5644    93     1.29   3284 NT AUTHORITY\N... wmpnetwk

このように「UserName」列が新たに追加されたことがわかります。

-InputObject” の実行結果から特定の実行ユーザでフィルターしたい場合はひと工夫が必要です。

Get-Process コマンドレットから「Where-Object」コマンドレットに“| (パイプライン)”で渡し比較演算子で比較します。

これをコマンドレットで表すと

Get-Process -IncludeUserName | Where-Object -FilterScript {条件}

となります。

また条件が「○○と一致」でフィルターする場合は

{$_.UserName -eq “<絞り込むユーザ名>”}

とスクリプトブロックに入力します。

自動変数”$_” の UserName プロパティにアクセスし “-eq” (イコール)で絞り込むユーザと比較するという動きですね。

実際にフィルタリングしてみると以下のようになります。

PS C:\work> Get-Process -IncludeUserName | Where-Object -FilterScript {$_.UserName -eq "CHESHIRE-PC\hoge"
}

Handles      WS(K) VM(M)   CPU(s)     Id UserName          ProcessName
-------      ----- -----   ------     -- --------          -----------
    188      18172   125    10.11   5812 CHESHIRE-PC\hoge  conhost
    110       7220    68     0.06   3656 CHESHIRE-PC\hoge  dwm
    650      92520   436    12.40   3292 CHESHIRE-PC\hoge  EXCEL
   1134      97496   400   169.43   3700 CHESHIRE-PC\hoge  explorer
    530      52440   255     0.75    448 CHESHIRE-PC\hoge  iexplore
    797     167072   408   204.17   4108 CHESHIRE-PC\hoge  iexplore
    691      44376   224    21.00   5452 CHESHIRE-PC\hoge  iexplore
    267      12284   162     0.30   3800 CHESHIRE-PC\hoge  IMECMNT
    154      12516    88     0.14   4040 CHESHIRE-PC\hoge  ipmsg
    118       9232    81     1.54   3928 CHESHIRE-PC\hoge  iusb3mon
     61       5512    57     0.03   3980 CHESHIRE-PC\hoge  jusched
     79       4472    45     0.03   4004 CHESHIRE-PC\hoge  MsSpellCheckingFacility
   1124     127084   400    14.31    704 CHESHIRE-PC\hoge  powershell
    113      14092    82     0.12   3468 CHESHIRE-PC\hoge  sakura
    222      20024   107     8.85   4024 CHESHIRE-PC\hoge  StikyNot
    323      17800   119     3.71   3564 CHESHIRE-PC\hoge  taskhost

スクリプトブロックでは比較対象に””(ダブルクォーテーション)がついていないとエラーが出るので注意してください。

-FileVersionInfo オプションでバージョンを確認する

次に実行ファイルのバージョン確認方法について紹介します。

“-FileVersionInfo” オプションではプロセスで実行されるプログラムファイルのバージョン情報が取得できます。

自分が所有していないプロセスや実行ファイルにアクセスすることがあるため管理者モードで実行する事をお勧めします。

管理者として実行するにはスタートメニューから PowerShell を[管理者として実行する]から起動します。

管理者として実行-チェシャわら

上図のように PowerShell を、[管理者として実行]から起動します。

起動した PowerShell 画面に、「管理者」と記載があれば管理者として起動が成功しました。(※下図参照)

管理者実行のPowershell-チェシャわら

このオプションを使用した実行方法は

Get-Process  -FileVersionInfo

という風にオプションを指定するだけです。

実際に実行してみると、

PS C:\work> Get-Process -FileVersionInfo

ProductVersion   FileVersion      FileName
--------------   -----------      --------
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\conhost.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\Dwm.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\Explorer.EXE
6.1.7600.16385   6.1.7600.1638... C:\Windows\Explorer.EXE
1,24,388,1       1.24.388.1 SY... C:\Program Files\Intel\iCLS Client\HeciServer.exe

Get-Process : Cannot enumerate the file version information of the "Idle" process.
At line:1 char:1
+ Get-Process -FileVersionInfo
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (System.Diagnostics.Process (Idle):Process) [Get-P
   rocess], ProcessCommandException
    + FullyQualifiedErrorId : CouldnotEnumerateFileVer,Microsoft.PowerShell.Commands.GetProcessCom
   mand

11.00.9600.16428 11.00.9600.16... C:\Program Files\Internet Explorer\iexplore.exe
11.00.9600.16428 11.00.9600.16... C:\Program Files\Internet Explorer\iexplore.exe
18, 7, 2, 0      18, 7, 2, 0      C:\Windows\system32\IProsetMonitor.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\lsm.exe
6.3.9600.16428   6.3.9600.1642... C:\Windows\System32\MsSpellCheckingFacility.exe
10.0.10586.117   10.0.10586.11... C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\services.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\smss.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\svchost.exe
Get-Process : Cannot enumerate the file version information of the "System" process.
At line:1 char:1
+ Get-Process -FileVersionInfo
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (System.Diagnostics.Process (System):Process) [Get-Process], ProcessCommandException
    + FullyQualifiedErrorId : CouldnotEnumerateFileVer,Microsoft.PowerShell.Commands.GetProcessCommand

6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\taskhost.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\taskhost.exe
8.1.0.1252       8.1.0.1252       C:\Program Files\Intel\Intel(R) Management Engine Components\U...
e.x.p build-1... 11. 1.6.1261454  C:\Program Files\Common Files\VMware\USB\vmware-usbarbitrator.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\wininit.exe
6.1.7601.17514   6.1.7601.1751... C:\Windows\system32\winlogon.exe
12.0.7600.16385  12.0.7600.163... C:\Program Files\Windows Media Player\wmpnetwk.exe

このように

  • プロダクトのバージョン
  • ファイルのバージョン
  • プロセスが実行するファイル名

といった情報が表示されます。

他の Get-Process コマンドレットの実行結果とは表示が大きく違うことに気が付きましたか?

“-FileVersionInfo” で取得する情報は単純な Get-Process コマンドレットの実行結果とはが違うんです。

試しに「メモ帳」を起動した状態でを確認してみると、

# 通常の実行結果
PS C:\work> (Get-Process -Name notepad ).GetType().FullName
System.Diagnostics.Process

# ファイルバ―ジョンの取得結果
PS C:\work> (Get-Process -Name notepad -FileVersionInfo).GetType().FullName
System.Diagnostics.FileVersionInfo

となり、

System.Diagnostics.Process」に対して

System.Diagnostics.FileVersionInfo

の異なる型が返ってきました。

型が変わったのでメソッドプロパティも大きく変わっているようです。気になる方はこちら↓にメソッドやプロパティを確認してみてください。

[blogcard url=”https://cheshire-wara.com/powershell/ps-cmdlets/object/get-member/”]

ちなみに、”Idle” と “System” プロセスの FileVersionInfo を見ようとすると「PermissionDenied(アクセス拒否)」が発生するようですね。 ”Idle” にはそもそも実行ファイルなんてものが無いでしょうし、”System” はWindowsそのものでしょうからね。

エラーを回避するために、この2つのプロセスを除外してファイルバージョンを確認するなら Where-Object で一旦フィルタするのがよさそうですね。

PS C:\work> #systemとidleをフィルタする
PS C:\work> Get-Process | Where-Object {$_.Name -ne "System" -and $_.Name -ne "idle"} | Get-Process -FileVersionInfo
ProductVersion   FileVersion      FileName
--------------   -----------      --------
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\conhost.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\Dwm.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\Explorer.EXE
6.1.7600.16385   6.1.7600.1638... C:\Windows\Explorer.EXE
1,24,388,1       1.24.388.1 SY... C:\Program Files\Intel\iCLS Client\HeciServer.exe
11.00.9600.16428 11.00.9600.16... C:\Program Files\Internet Explorer\iexplore.exe
11.00.9600.16428 11.00.9600.16... C:\Program Files\Internet Explorer\iexplore.exe
18, 7, 2, 0      18, 7, 2, 0      C:\Windows\system32\IProsetMonitor.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\lsm.exe
6.3.9600.16428   6.3.9600.1642... C:\Windows\System32\MsSpellCheckingFacility.exe
10.0.10586.117   10.0.10586.11... C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\services.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\smss.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\svchost.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\taskhost.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\taskhost.exe
8.1.0.1252       8.1.0.1252       C:\Program Files\Intel\Intel(R) Management Engine Components\U...
e.x.p build-1... 11. 1.6.1261454  C:\Program Files\Common Files\VMware\USB\vmware-usbarbitrator.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\system32\wininit.exe
6.1.7601.17514   6.1.7601.1751... C:\Windows\system32\winlogon.exe
12.0.7600.16385  12.0.7600.163... C:\Program Files\Windows Media Player\wmpnetwk.exe

まとめ

実行中のプロセスについて実行ユーザを確認する場合は、

Get-Process -IncludeUserName

実行中のプロセスについて実行ファイルのバージョンを確認する場合は、
Get-Process -FileVersionInfo

を使用する。

ただし、”Idle” と “System” プロセスの FileVersionInfo は参照できない。

コメントを残す

メールアドレスが公開されることはありません。