我需要在 Windows 10 中使用批处理脚本卸载 VHD。我在网上找到的唯一解决方案是针对 Windows 7 的,并且涉及 Diskpart。还有其他可用的原生 Windows 命令行工具可以完成这项工作吗?
答案1
由于我还没有找到仅依赖 MS 安装的命令行工具的方法,因此我将列出第三方解决方案。
执行程序
执行程序使用户能够从命令行调用 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
虚拟挂载
虚拟挂载支持相当多的 VHD 相关功能。它的大小(x86:432KB;x64:2.53MB)对于仅仅调用 WinApi 来说相当大,所以它不是我场景的解决方案,但可能对其他人有用。
vmount detach \\.\PhysicalDriveX
磁盘分区
为了完整起见,还应提及 DiskPart。它支持大量与磁盘相关的功能,但在自动化脚本编写所需的用户输入方面却相当迟缓。它也是列表中唯一一款如果您意外地在没有提升权限的情况下运行脚本就会陷入循环的工具。
将以下两行保存到文本文件中:
select vdisk file="C:\Example Path\Test.vhd"
detach vdisk
现在,Dism 可以将文本文件解析为无人值守应答文件的形式:
DISKPART /s C:\Path_to\Name_Of_Textfile.txt
答案2
您可以使用原生 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'"
无论哪种情况,您都必须使用提升的(以管理员身份运行)提示。
另一件需要注意的事情是你需要首先启用 Hyper-V 功能。
答案3
这是一个扩展的答案:(您应该能够了解如何卸载 VHD)
如何在启动/关机时自动挂载和卸载 VHD 文件。
在 Windows 10 中情况似乎发生了一些变化。
首先,我应该说我正在安装存储在 Linux 文件服务器上的 VHD,并通过 SMB 安装。
第二,非常重要的是,如果您在重新启动时不分离磁盘,那么当您尝试重新连接它时,它会显示“该文件正在使用中,无法访问”......
因此我们需要自动挂载和卸载。卸载有点棘手,因为我不能直接把它放在启动文件夹中。您必须使用组策略。此外,当作为“关机/启动”脚本运行时,它运行得太早了,您需要在“登录/注销”时运行它
我有 4 个文件C:\mount
安装命令
@ECHO OFF
DISKPART /s C:\mount\mount.txt
卸载命令
@ECHO OFF
DISKPART /s C:\mount\umount.txt
卸载
select vdisk file="\\192.168.1.255\Blizzard.vhdx"
detach vdisk
安装.txt
select vdisk file="\\192.168.1.255\Blizzard.vhdx"
attach vdisk
现在在开始类型/运行中将gpedit.msc
脚本添加到登录/注销