LoginSignup
0
0

More than 1 year has passed since last update.

[09] PowerShell実践例 ... プロセス情報から実行ファイル置き場を特定する

Last updated at Posted at 2021-07-31
本シリーズのトップページ
https://qiita.com/robozushi10/items/0b0605257ad39bc22895

はじめに

Windows に GUI アプリ「ABC.exe」がある とした場合、
この「ABC.exe」の置き場を特定する処理について記す.

実際の運用では、以下を検査するというものであった.
・「製品版の実行ファイルが使用されているか?」(== 誤ってデバッグ版を使っていないか)

参考にした情報は下記ページであり、本項ではこの中で挙げられているコードを補足する.

URL
it-swarm-ja.com ファイルをロックしているアプリケーションをチェックするためのPowerShellスクリプト?
image.png

 
 

補足

Linux であれば、次のコマンドで実行ファイル置き場を特定することができる.

realpath /proc/<プロセス番号>/exe

 

環境

Windows 10 Pro
PowerShell バージョン 6系

処理概要

次の 1〜5 の処理をする

1. 期待する実行ファイル置き場を定義する

2. 上記 1 のプロセス名を定義する

3. Get-Process (== psコマンド)を実行して、2 の名称を持つ「プロセス情報」を抽出する

4. 「プロセス情報」のメンバ Modules にアクセスして実行ファイルパスを得る

5. 上記 4 で得たパスが 上記 1 と一致するか判定する

 

詳細

# 期待する実行ファイル置き場 (🛑上記 1 に該当する)
$EXP = "C:\work\product\ABC.exe"
# プロセス名  (🛑上記 2 に該当する)
$N = "ABC"
# エラー有無. 初期値は "エラーあり". ($True, $False) = (エラーあり, なし)
$ERR = $True 

# 「ps -ef |grep "ABC"」に相当する (🛑上記 3 に該当する)
Get-Process -Name $N | `
  # 1プロセスずつ精査する
  foreach {
    # 「ある 1つのプロセス情報」を $processVar に格納する
    $processVar = $_ 
    # Modules メンバには実行ファイルの情報が格納されている. (🛑上記 4 に該当する)
    $_.Modules | `
    foreach {
      # 実行ファイルのパスが「期待する実行ファイル置き場」と一致するか? (🛑上記 5 に該当する)
      if($_.FileName -eq $EXP)
      {
        # 実行ファイルのパスが「期待する実行ファイル置き場」と一致したので "エラーなし" にする
        $processVar.Name + " PID:" + $processVar.id
        # 「エラーなし」にする
        $ERR = $False
      }
    }
  }

# 「期待する実行ファイル置き場」で実行されていたか?
if($ERR -eq $True)
{
  # エラーあり. 「期待する実行ファイル置き場」では実行されてなかった
}

 

参考にしたサイト

URL
it-swarm-ja.com ファイルをロックしているアプリケーションをチェックするためのPowerShellスクリプト?
https://docs.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process.modules?view=net-5.0
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0