Batch: check_gpu_connection.bat

概要

このブログ記事では、高性能グラフィックボードを搭載したパソコンを効果的に活用するためのスクリプトを紹介します。IntelマザーボードのディスプレイポートやHDMIポートにディスプレイを接続してしまうと、増設したNvidiaなどのグラフィックボードが活かせません。そこで、マザーボードのIntel GPUとNVIDIAなどのグラフィックボードが搭載されたパソコンを運用する企業で、モニター接続の誤りを防ぐために作成したバッチファイルを紹介します。PCの展開イメージに組み込んで、起動時に表示することで、ユーザーが接続ミスに気付くことが期待できます。ただし、簡易な内容で作成しているため、機種や環境によっては正しく動作しない場合があります。

実行時のコマンドプロンプトの画面

実行時のコマンドプロンプトの画面

前提条件
  • PythonがPCにインストールされている
  • PCがインターネットに接続されている
  • ユーザーがPCを設置し終えてPCを起動したときに、タスクスケジュールなどでBatを起動させるような運用設計
BAT動作内容

ファイルは、Batファイル、Pyファイルの2つを作っています。
BatがPyファイルを実行し、その情報をBatが表示します。

  1. pip install wmiを実行。このPythonのモジュールを利用してGPU情報を取得する
  2. Batがpythonのファイルを実行し、アクティブなGPU情報を取得
  3. コマンドプロンプト画面に、アクティブなGPU情報を表示
  4. Batがユーザーへコメントを表示して選択を求める
  5. Yesの場合はBatを削除 して起動しなくする

下記のコードをコピペして、ファイル名を check_gpu_connection.bat などとして保存する
日本語を含んでいるので、文字化けを避ける為にメモ帳などで保存する時に文字コードは「ANSI」を選択して下さい。

BAT (Batchfile)
@echo off
setlocal enabledelayedexpansion

echo 必要なモジュールをインストールしています...

pip install wmi

echo.
echo 接続しているGPUを確認しています...
echo Checking the connected GPU...
echo.
echo.
echo ===============================================================================
echo.
python display_gpu_info.py
echo.
echo Active と表示されたGPUがモニターと接続されているようです。
echo.
echo NVIDIAのグラフィックボードがActiveでない場合は、
echo モニターがグラフィックボードと接続されているか確認してください
echo GPU marked Active appears to be connected to the monitor.
echo If the NVIDIA graphics board is not Active,
echo please check if the monitor is connected to the graphics board
echo.
echo ===============================================================================
echo.

:choice
echo.
echo 確認しましたか?Have you checked?
echo 1) はい Yes (このバッチファイルを削除します) Delete this batch file
echo 2) いいえ No
echo.

set /p choice=選択してください (1 or 2):
if "%choice%"=="1" goto yes
if "%choice%"=="2" goto no
echo 1 または 2 を入力してください。
goto choice

:yes
del "%~0"
exit

:no
exit

次にPythonの実行ファイルです。
テキストへコピペして、display_gpu_info.py というファイル名で保存
このファイル名はBatへも書いているのでファイル名を変更しないでください。

BAT (Batchfile)
import wmi

def main():
    wmi_instance = wmi.WMI()
    display_info = wmi_instance.query("SELECT * FROM Win32_PnPEntity WHERE PNPClass='Display'")
    video_info = wmi_instance.query("SELECT * FROM Win32_VideoController")

    active_gpu = None
    for video in video_info:
        if video.CurrentNumberOfColors is not None:
            active_gpu = video.Caption

    for display in display_info:
        display_name = display.Caption
        display_device_id = display.DeviceID

        for video in video_info:
            if video.PNPDeviceID in display_device_id:
                gpu_name = video.Caption
                print(f"{display_name} is connected to {gpu_name}")

    print(f"Active GPU: {active_gpu}")

if __name__ == "__main__":
    main()
使い方
  1. check_gpu_connection.bat を作成
  2. display_gpu_info.py を作成
  3. 2つのファイルは同じフォルダ階層へ保存
  4. Batファイルを管理者として実行

Windowsの展開イメージなどへ仕込む場合は、Pythonも一緒にWindowsへインストールしてからSysprepすると良いと思います。