WindowsでハードウェアIDを取得したい
▼ ハードウェアIDに求められる条件
- ハードウェアごとに固有で不変なID
- 何があっても絶体に変わらないID
- 特殊な方法を使わない
- 普通のコマンドから取得可能
この取得にはいくつか方法があります。
僕も含めて知らない人が多いと思うので、
自分用メモとして方法・コマンドをまとめました。
このページの目次
MACアドレスはハードウェアIDとは呼べない?
真っ先に思う付くのがMACアドレスです。
でもこれはハードウェアIDではありません。
▼ MACアドレスとは?の分かりやすい解説
MACアドレス(マック・アドレス、英語: Media Access Control address)とは、Media Access Controlにおいて、ネットワークインタフェースを識別するために使用される識別子である。OSI参照モデルでいえば、第2層(データリンク層)にあたる。原則として全てのネットワーク機器に一意に割り当てられるが、様々な要因で例外が存在する。
引用元 : https://ja.wikipedia.org/wiki/MAC%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9
全てのネットワーク機器に割り当てらるIDのこと
でも気になることが最後に書いてあります。
「様々な要因で例外が存在する。」
この例外というのが曲者です。
▼ MACアドレスが不変ではない例
- 仮想マシンなどを使っている場合
- ソフトウェア的に変更された場合
実は不変ではなくソフト的にも変更できます。
だからハードウェアIDには少し不適格です。
ここでのハードウェアIDの定義とは
だから以下の条件に当てはまるもの、
それをハードウェアIDと定義します。
- Windowsごとに固有であること
- 首尾一貫して不変性が保証されるもの
- 最低でもソフト的に変更できないこと
少なくともソフト的に変更できたら意味ありません。
固有かつ不変のUUIDである必要があります。ただしWindows以外のOS(Linux・Darwin・他OS)との固有性は考えないものとし、飽くまでWindows間でユニークという意味です。
その取得には2つの方法があります。
方法1.ハードウェアIDをwmicコマンドで取得
1つ目の方法はwmicコマンドを使う方法
次のようなコマンドから取得可能です。
▼ wmicコマンドからハードウェアID取得の例
1 2 3 4 |
> wmic csproduct get uuid UUID 12345678-9ABC-0000-1234-1234567890AB |
上記コマンド例だったら 12345678-9ABC-0000-1234-1234567890AB の部分がそれです。ちょうど 8桁-4桁-4桁-4桁-12桁 というUUID形式を持っています。
手軽で楽な方法かもしれません。
ただしWidnows10以降でwmicコマンドは使用不可?
でもこの方法は少し心配なところがあって……
Windows11以降では使えない恐れありです。
▼ 公式での発表
WMI コマンド ライン (WMIC) ユーティリティは、Windows 10、バージョン 21H1、および Windows Server の 21H1 半期チャネル リリース時点で非推奨とされます。 このユーティリティは、WMI のWindows PowerShellに置き換えられます (「第 7 章? WMI の使用」を参照)。 この非推奨は、WMI コマンド ライン (WMIC) ユーティリティにのみ適用されます。Windows管理インストルメンテーション (WMI) 自体は影響を受けません。
引用元 : https://learn.microsoft.com/ja-jp/windows/win32/wmisdk/wmic
非推奨だから削除ではない模様
Win10・Win11以降でも問題なく使える。もし個人的にWindowsのハードウェアIDが知りたいだけなら、wmicコマンドを使えばOKです。
削除されるまでは使うことが可能です。
方法2.ハードウェアIDをpowershellから取得
こちらの方法が確実です。
ハードウェアIDをpowershell経由で取得
▼ 実際に次のようなコマンドで取得可能
1 2 3 |
>powershell -Command (Get-WmiObject -Class Win32_ComputerSystemProduct).UUID 12345678-9ABC-0000-1234-1234567890AB |
返ってくるIDはさっきのwmicコマンドと同じ。
ハードウェアごとに重複しない不変のIDです。
▼ ちなみにpowershellのWMIコマンドレットについて
Windows PowerShellは、既定でWindows PowerShellで使用できる一連のコマンドレットを介して WMI 機能を実装します。 これらのコマンドレットを使用して、ローカル コンピューターとリモート コンピューターを管理するために必要なエンドツーエンドのタスクを完了できます。
従来のwmicコマンドは非推奨。
これからはpowershellを使うのが推奨されます。
このIDを取得して何かの役に立つの?
例えばこういう場面とか…
▼ Pythonで完全一意なハードウェアIDを取得する方法
ハードウエアを一意に識別したい時などです。
滅多にないけど役立つかもしれません。
WindowsでのハードウエアID取得のまとめ
以上、Win環境でのハードウエアID取得でした。
MACアドレスは一意とまでは呼べません。
だからwmicコマンドからUUID取得が確実です。
ただし非推奨だからpowershell経由という感じで…