ラボ/データセンターでデスクトップをWindowsサーバーにリモート化しています。私はすべてのサーバーがプログラムで仮想マシンまたは物理サーバーであることを理解する必要があります。確かに、環境シートにどちらがどれかを教えてもらいます。しかし、それを区別するためのコードを書く必要があります。どんなテクニックを使う必要がありますか?それを行うための.Netアセンブリが見つかりませんでした。知識やガイダンス、研究の方向性やリンクを共有してくれる専門家を探しています。何でも歓迎します。
次のPowerShellスクリプトを使用してみてください。WMIを使用して、マシンが仮想マシンか物理マシンかを確認します。
gwmi -q "select * from win32_computersystem"
ドメイン:... 製造元:Microsoft Corporation モデル:仮想マシン 名前:..... ....
これをコマンドプロンプトから確認するには、次のコマンドを実行します:systeminfo | find "System"
仮想サーバーの出力例:
System Manufacturer: Microsoft Corporation
System Model: Virtual Machine
System Type: x64-based PC
物理サーバーの出力例:
System Manufacturer: HP
System Model: ProLiant BL460c G6
System Type: x64-based PC
私が知る限り、これを行う簡単な方法はありません。
いくつかの回避策がありますが、少なくとも私の知る限り、万能の解決策はありません。
Ben Armstrongが Detecting Microsoft virtual machine に関する投稿を書いており、 Virtual PCまたはVMWare 内で実行しているかどうかを判断できる低レベルのトリックがありますが、それでもVirtualBoxは除外されますその他。
VMWareツールまたはVirtualBoxツールがインストールされているかどうかを検出することは、試してみたいトリックです。ほとんどの場合、必要な機能を提供するためにゲストOSにインストールされますが、エンドでさまざまなインストールGUIDSを維持するのは難しいため、理想的なソリューションではありません。
---また、VMがLinuxで実行されている場合KVM環境では、出力は次のようになります。
ベアメタルで実行しているか、仮想コンピューターで実行しているかを確認する簡単な方法はありません。たとえば、マシンにネットワークアダプターがあるかどうかなど、ハードウェア情報を入手して推測に基づいて推測するのが最善の方法です。 Microsoft、VMware、Oracle、Hyper-V、Virtual、VirtualBoxが含まれています。おそらく、Microsoft、Oracle、VMwareのいずれもネットワークカードを製造していない仮想マシンです。
C#を使用する場合、これおよびその他のハードウェア情報を取得するためのクラスは ManagementClass です。また、ManagementClassを使用してコンピューターから大量の情報を取得できるようにする、この素晴らしい project もあります。
Systeminfoコマンド@コマンドプロンプトを実行しますシステムモデルの詳細でシステムの製造元を確認します。そこで、仮想マシンと物理マシンの情報を見つけることができます。
このコマンドはcmdまたはpowershellで使用できます
システム情報
次のテキスト(または同様の)の行が見つかります。
システムメーカー:VMware、Inc.システムモデル:VMware Virtual Platform
これを試して:
FOR /F "tokens=*" %a IN ('wmic bios get bioscharacteristics^|find /c "33"') DO set USBlegacy=%a
これは、私の環境の限られた範囲のデスクトップおよびラップトップについては「1」を返し、VMWareワークステーション9、ESX 5.5、およびCitrix 6.5および7.6については「0」を返します。 BIOSCharacteristic "50"(1つは "システムベンダー用に予約済み")4つの仮想環境でしか見つからないので、逆に動作します。
編集:またはこれがあります:
FOR /F "tokens=*" %a IN ('wmic path win32_pnpentity get ^|find /c "ACPI Fan"') DO set ACPIfan=%a
HPデスクトップでは「5」、VMwareワークステーション9およびESX 5.5では「0」を返します。他ではテストされていません。