none
仮想マシンのVHD(X)の容量の取得について RRS feed

  • 質問

  • Hyper-V環境で、仮想マシンのVHD(X)の容量をコマンドから取得する方法を探しています。

    VHD(X)の情報が格納されているクラスをご存じないでしょうか。

    Microsoftサイトを拝見しますと、Msvm_VirtualHardDiskSettingData, Msvm_VirtualHardDiskStateあたりが該当しそうですが、Hyper-Vホスト上でコマンドを実行しても、実行結果は何も表示されません。これらのクラスが正しいのかどうか。正しい場合なぜ実行結果が表示されないかわかりません。おわかりの方いらっしゃいましたら教えて下さい。

    ■テスト環境

    ・Windows Server 2012 R2のHyper-Vホスト

    ・上記Hyper-Vホスト上で実行中(稼働中)の仮想マシンは、Windows Server 2012 R2、Windows Server 2008 R2、CentOS7

    ・実行してみたコマンドは以下です。(localhostは127.0.0.1で試しても結果は同じでした)

    Get-WmiObject -Namespace root\Virtualization\v2 -ComputerName localhost -Query "Select * from Msvm_VirtualHardDiskSettingData"

    Get-WmiObject -Namespace root\Virtualization\v2 -ComputerName localhost -Query "Select * from Msvm_VirtualHardDiskState"

    ■参考

    ・Windows Server 2016Hyper-Vホスト上で試しても結果は同じでした。

    ・Windows Server 2016Hyper-Vホスト上ではWindows Server 2012 R2ゲストが稼働中(実行中)です。

    ■補足

    Msvm_VirtualHardDiskSettingData, Msvm_VirtualHardDiskStateにこだわっているわけではないので、他にVHD(X)の容量を取得する方法をご存知でしたら教えて下さい。


    • 編集済み ngn147 2019年11月23日 7:35 誤記修正のため
    2019年11月23日 5:01

回答

  • kmhmlさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    本件、Hebikuzure aka Murachi Akiraさんより参考になる投稿が寄せられたようでなによりです。

    [回答としてマーク]機能は設定された投稿が後から参照しやすくなりますので、
    同じ問題でお困りの方のためにも参考になった投稿に設定いただけますと幸いです。

    お手数ですが、ご協力の程どうかよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク ngn147 2019年12月1日 15:30
    2019年11月27日 1:14
    モデレータ

すべての返信

  • PowerShellでこんなのでは?

    Get-VM | Get-VMHardDiskDrive | Get-VHD | Select-Object ParentPath,FileSize

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2019年11月23日 12:48
  • gekkaさん

    お返事ありがとうございます。頂いたコードを試してみたところVHDの容量を取得できました。

    ちなみにもしご存知でしたらご教授頂きたいのですが、「Get-WmiObject -Namespace root\Virtualization\v2 -ComputerName localhost -Query "Select * from xxx"」といったようにWMIクエリを使って取得する場合どのようにすればいいかご存知ありませんでしょうか。

    2019年11月23日 16:49
  • 今実際に確認できる環境でないところからの書き込みですが、このような WMI クラスの確認については

    WMI Explorer

    を使われると良いでしょう、見て調べるだけでなく、実際のクエリを実行して確認することも可能です。



    Hebikuzure aka Murachi Akira

    2019年11月24日 4:44
  • Hebikuzure aka Murachi Akiraさん

    お返事ありがとうございます。

    さっそく教えて頂いたツールを試してみました。ツール内でdiskでフィルタリングして調べてみると、Msvm_LogicalDiskというクラスがあり、クエリ結果に「BlockSize」と「NumberOfBlocks」がありました。乗算してみると、ほぼ仮想マシンに割り当てた仮想ディスク容量と合致したのでこれらの値が使えそうです。(SELECT * FROM Msvm_LogicalDisk)

    大変助かりました。ありがとうございました。

    2019年11月24日 7:27
  • kmhmlさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    本件、Hebikuzure aka Murachi Akiraさんより参考になる投稿が寄せられたようでなによりです。

    [回答としてマーク]機能は設定された投稿が後から参照しやすくなりますので、
    同じ問題でお困りの方のためにも参考になった投稿に設定いただけますと幸いです。

    お手数ですが、ご協力の程どうかよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク ngn147 2019年12月1日 15:30
    2019年11月27日 1:14
    モデレータ