Windows 10でバッチスクリプトを使用してVHDのマウントを解除する必要があります。オンラインで見つけた唯一の解決策は、Windows 7に向けられており、Diskpartに関係していました。仕事をすることができる他の利用可能なネイティブのWindowsコマンドラインツールはありますか?
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
ネイティブの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機能を有効にする する必要があることです。
これは拡張された答えです:(VHDをアンマウントする方法を収集できるはずです)
HowToブート/シャットダウン時にVHDファイルを自動的にマウントおよびアンマウントします
Windows 10では、状況が少し変わったようです。
最初に、Linuxファイルサーバーに格納されているVHDをマウントし、SMB経由でマウントしていることを言う必要があります。
次に、非常に重要なことですが、再起動時にディスクを切り離さない場合、再接続しようとすると、「ファイルは使用中でアクセスできません」と表示されます。
したがって、自動マウントとアンマウントの両方が必要です。アンマウントは、スタートアップフォルダーに置くだけではできないため、少しトリッキーであることがわかりました。グループポリシーを使用する必要があります。また、「シャットダウン/起動」スクリプトとして実行すると、早期に実行されたため、「ログオン/ログオフ」で実行する必要があります。
C:\mount
に4つのファイルがあります
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
を開始して、スクリプトをログオン/ログオフに追加します。