cheshire-boy

システム・サービス

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

投稿日:2016年12月2日 更新日:

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

今回は、

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

についてご紹介します。

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

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

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

 

スポンサーリンク

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

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

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

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

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

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

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

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

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

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

となります。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Get-Process  -FileVersionInfo

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

実際に実行してみると、

このように

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

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

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

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

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

となり、

System.Diagnostics.Process」に対して

System.Diagnostics.FileVersionInfo

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

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

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

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

まとめ

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

Get-Process -IncludeUserName

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

を使用する。

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

スポンサーリンク

-システム・サービス
-, , , , ,

Copyright© 【チェシャわら】PowerShellとは、から学ぶ入門者の教科書-脱コマンドプロンプト- , 2018 AllRights Reserved Powered by micata2.