Windows 10でコマンドラインからVHDをマウント解除する方法


9

Windows 10でバッチスクリプトを使用してVHDをマウント解除する必要があります。オンラインで見つけた唯一の解決策は、Windows 7に向けられ、Diskpartを使用することでした。仕事をすることができる他の利用可能なネイティブのWindowsコマンドラインツールはありますか?


cmdでは注意が必要です。私はpowershellを知りませんが、powershellは多くのことをします。たとえば、多くのリンクはpowershellがvirtualizationadmin.com/kbase/VirtualizationTips/… およびtechnet.microsoft.com/en-us/library/hh848562(v=wps .630).aspx
barlop 2015

@barlopコメントとリンクありがとうございます。バッチは、Powershellがインストールされていないシステムで実行できる必要があるため、これはオプションではありません。
Zerobinary99 2015

diskpartを使用したくない特別な理由はありますか?たとえば、非インタラクティブな方法で実行できるため、diskpartスクリプトをファイルscript.txtにエコーし、diskpart / s script.txtを実行するバッチファイルを作成できます。ここにdiskpartスクリプトの例がありますtechnet.microsoft .com / en-us / library / dn614984.aspx
barlop

@barlop私はdiskpart-solutionを認識しており、現在別のシステムで使用しています。これが機能することを意図しているものには、diskpartがありません。
Zerobinary99 2015

私はそれをするサードパーティを見つけることさえ十分に難しいと思います。ネイティブコマンドはよく知られています。diskpart以外にそれを行うものはないと思います。diskpartがこれを行うのは、ほとんど奇跡です。(diskpartはfdiskのような「単純な」プログラムであり、人々はオプションに気付かずにそれを使用する傾向があります。それを行う別のネイティブコマンドがあるという考えはほとんど考えられません。バッチファイルを置くことができる場合そこに、diskpartのようなプログラムを配置できませんか?
barlop

回答:


6

MSがインストールしたコマンドラインツールのみに依存する方法を見つけられなかったので、サードパーティのソリューションを挙げます。


WinApiExec

WinApiExecを使用すると、ユーザーはコマンドラインからWindows APIを呼び出すことができます。32ビット実行可能ファイルのサイズはわずか3.5KB(x64:5.5KB)であるため、途方もなく小さいため、おそらくオーバーヘッドは最小限に抑えられます。

winapiexec.exe virtdisk.dll@OpenVirtualDisk $a:2,0 "C:\Example Path\Test.vhd" 262144 0 0 $b:4 , virtdisk.dll@DetachVirtualDisk $$:7@0 0 0

vMount

vMountは、かなりの数のVHD関連機能をサポートしています。そのサイズ(x86:432KB; x64:2.53MB)は、WinApiを呼び出すだけではかなり大きいので、私のシナリオでは解決策ではありませんが、他の人には役立つかもしれません。

vmount detach \\.\PhysicalDriveX

DiskPart

完全を期すために、DiskPartについても説明します。これは、ディスク関連の機能の多くをサポートしていますが、スクリプトを作成するために必要なユーザー入力を自動化するためのやや遅い方法です。また、昇格された権限なしで誤ってスクリプトを実行した場合にループに陥る、リスト上の唯一のツールでもあります。

次の2行をテキストファイルに保存します。

vdisk file="C:\Example Path\Test.vhd"
detach vdisk

これで、Dismはテキストファイルを無人応答ファイルの形式として解析できます。

DISKPART /s C:\Path_to\Name_Of_Textfile.txt

3

ネイティブのWindows 10 Powershellを使用してvhd / vhdxをマウントおよびアンマウントできます。

Import-module hyper-v
Dismount-VHD -Path 'c:\my.vhd'

cmd / batから:

powershell -command "Import-module hyper-v; Dismount-VHD -Path 'c:\my.vhd'"

どちらの場合も、昇格した(管理者として実行)プロンプトを使用する必要があります。

もう1つ注意すべき点は、最初にHyper-V機能有効にする必要があることです。


私のコメントから私の質問への質問:「バッチは、Powershellがインストールされていないシステムで実行できる必要があるため、それはオプションではありません。」
Zerobinary99 2017

私が知っている限り、PowershellはWindows 10の不可欠な部分です(Windows 10について質問しました)ので、それをインストールまたはアンインストールすることはできません。ただし、その実行は、グループポリシーなどのさまざまな手段によってブロックされる可能性があります。
アントン・クルーグロフ2017

なぜ条件を疑うのですか?それらには理由があります。私はPowerShellのないWindows Liteのを実行していると私はより軽量のオプションが利用可能であるならば、私は必要としないというプラットフォーム全体を保つことに嫌うんだ
Zerobinary99

1
私は同様の問題を抱えています。グーグルはあなたの古い質問をもたらしました。したがって、この答えは他の人にも役立つかもしれません。
アントンクルーグロフ2017

この質問は2年以上前のものであり、タイトルはあなたの要件に関して曖昧なので、この回答は私の拡張された回答と同様に他の多くの人々を助けます。このサイトの運用方法とそのポリシーの詳細については、スタック交換メタの詳細をお読みください。これらの種類の回答はコミュニティ@ Zerobinary99に非常に役立ちます
FreeSoftwareServers

1

これは拡張された答えです:(VHDをアンマウントする方法を収集できるはずです)

HowToブート/シャットダウン時にVHDファイルを自動的にマウントおよびアンマウントします。

Windows 10では、状況が少し変わったようです。

最初に、Linuxファイルサーバーに格納されているVHDをマウントし、SMB経由でマウントしていることを述べておく必要があります。

次に、非常に重要なことですが、再起動時にディスクを切り離さない場合、再接続しようとすると、「ファイルは使用中でアクセスできません」と表示されます。

したがって、自動マウントとアンマウントの両方が必要です。アンマウントは、スタートアップフォルダーに置くだけではできないため、少しトリッキーであることがわかりました。グループポリシーを使用する必要があります。また、「shutdown / startup」スクリプトとして実行すると、早期に実行されたため、「Logon / Logoff」で実行する必要があります。

4つのファイルがあります C:\mount

mount.cmd

@ECHO OFF

DISKPART /s C:\mount\mount.txt

umount.cmd

@ECHO OFF

DISKPART /s C:\mount\umount.txt

umount.txt

select vdisk file="\\192.168.1.255\Blizzard.vhdx"
detach vdisk

mount.txt

select vdisk file="\\192.168.1.255\Blizzard.vhdx"
attach vdisk

次に、タイプ/実行gpedit.mscを開始し、スクリプトをログオン/ログオフに追加します

ここに画像の説明を入力してください


答えてくれてありがとう。しかし、これは問題の解決策ではありません。Diskpartを使用する以外に、バッチ互換のソリューションを探していました。基本的に、すでに私の回答にあるのと同じ構文を貼り付けました。
Zerobinary99

サードパーティのツールを使用せずに組み込みのWindows機能を使用する以外に オキシモロンのようです。
FreeSoftwareServers

私は他のネイティブWindows関数を求めていました。それについての矛盾したことは何もありません。あなたには一般的な理解の問題があるようです。
Zerobinary99
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.