とある会社(ほんととある会社)の話になったときに、「あの会社は、あの会社の子会社だよ」と言われてびっくりしたことがある。その会社の社員ならば、知っているのかもしれない。しかし、逆に、あの会社とあの会社、同じ屋号だけど別会社というのもある。なので、実際、会社自体がどこと関連しているかわからないことがある。仮想マシンの場合は、WindowsならWindowsの顔をしている。デバイスマネージャをひらけば、なんとなくわかるかもしれないが、KVMのように、VMwareのVMXnet3が使えてしまったりするため、デバイス名だけで判定するのも危ない。
閑話休題
Linuxだとdmesgをみれば、どの仮想プラットフォームで動いているのか判別できたのだが、Windowsだとどうする?
調べてみた。こんな感じ。以下のコマンドで調べられそう。
Get-WmiObject -Class Win32_ComputerSystem -Namespace "root\cimv2"
出力結果は以下。あくまでもベンダー名なので、実際にどれがKVMかはわからない。
VMware
Domain : WORKGROUP
Manufacturer : VMware, Inc.
Model : VMware20,1
Name : WIN-ACHKTRA783S
PrimaryOwnerName : Windows ユーザー
TotalPhysicalMemory : 4293971968
Hyper-V
Domain : WORKGROUP
Manufacturer : Microsoft Corporation
Model : Virtual Machine
Name : WIN-OOUO73SG5AO
PrimaryOwnerName : Windows ユーザー
TotalPhysicalMemory : 4293861376
Nutanix AHV
Domain : WORKGROUP
Manufacturer : Nutanix
Model : AHV
Name : WIN2022AHV-1
PrimaryOwnerName : Windows ユーザー
TotalPhysicalMemory : 4294402048
OpenShift Virtualization
Domain : WORKGROUP
Manufacturer : Red Hat
Model : OpenShift Virtualization
Name : WIN-6CB7M2ML3US
PrimaryOwnerName : Windows ユーザー
TotalPhysicalMemory : 4274995200
Proxmox
Domain : WORKGROUP
Manufacturer : QEMU
Model : Standard PC (i440FX + PIIX, 1996)
Name : WIN-OOUO73SG5AO
PrimaryOwnerName : Windows ユーザー
TotalPhysicalMemory : 4288753664
KVMは、バラバラで当てにならないなぁ。Oracle Virtualizationは今動かせていないので後で調べる。
結構表示がバラバラである。。。
なんで、こんなことを調べたのかというと、移行したVMが元VMwareだった場合、移行後にVMware Toolsを抜きたかった。ただし、普通にはアンインストールができなく、以下のスクリプトで無理やり抜く羽目に。
これをスクリプトに仕組んでみた。手順としては
起動時にこのコマンド出力でManufacturerが、VMware, Inc.ではない場合、上記のスクリプトを実行する。
とした。
KVMかどうかを検知したかったが、難しそうだったのでVMwareではなければという判定を使った。
実際に動くかどうかつかってみてのお楽しみだが。