如何在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

有什么特殊的原因为什么您不想使用diskpart?例如,它可以以非交互方式运行,因此您可以拥有一个批处理文件,该文件将diskpart脚本回显到文件script.txt中,然后执行diskpart / s script.txt,这里有一个diskpart脚本的示例technet.microsoft .com / zh-CN / library / dn614984.aspx
barlop 2015年

@barlop我知道diskpart-solution,并且我当前在其他系统上使用它。打算用于此操作的磁盘上没有磁盘部分。
Zerobinary99

我认为,即使找到做到这一点的第三方也很难。本机命令是众所周知的,我敢肯定除了diskpart之外没有其他命令。diskpart做到这几乎是一个奇迹。(因为diskpart是一个类似于fdisk的“简单”程序,人们倾向于在不注意该选项的情况下使用它。几乎没有办法想到还有另一个本机命令来执行此操作的想法。如果可以放置批处理文件,在那儿,你不能把像diskpart这样的程序放在那儿吗?
barlop 2015年

Answers:


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。它支持大量与磁盘相关的功能,但是运行起来相当缓慢,可以自动执行其他用户所需的脚本输入。如果您意外地在没有提升权限的情况下运行脚本,它也是列表中唯一会陷入循环的工具。

将以下两行保存到文本文件中:

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'"

无论哪种情况,您都必须使用提升的(以管理员身份运行)提示。

要注意的另一件事是,您需要首先启用Hyper-V功能


从我的评论到我的问题:“该批处理程序必须能够在未安装Powershell的系统上运行,因此恐怕这不是一个选择。”
Zerobinary99 '17

据我所知,Powershell是Windows 10的组成部分(您已经询问过Windows 10),因此无法安装或卸载它。但是,它的执行可能被各种方法阻止,例如组策略。
安东·克鲁格洛夫

您为什么要质疑条件?这是有原因的。我正在运行没有Powershell的Windows Lite,并且我不愿意保留如果有更多重量轻选项就不需要的整个平台
Zerobinary99 '17

1
我有类似的问题。谷歌搜索产生了您的老问题。因此,此答案也可能对其他人有帮助。
安东·克鲁格洛夫

由于此问题已有两年之久,并且标题对您的要求含糊不清,因此该答案和我的扩展答案一样会帮助很多其他人。您应该阅读更多堆栈交换Meta信息,以了解有关本网站如何运作及其政策的更多信息。这些答案对社区非常有用@ Zerobinary99
FreeSoftwareServers 18/01/27

1

这是一个扩展的答案:(您应该能够收集如何卸载VHD)

如何在启动/关闭时自动挂载和卸载VHD文件。

Windows 10中的情况似乎有所变化。

首先,我应该说我正在装载存储在Linux File Server上的VHD,并通过SMB装载。

其次,非常重要的一点是,如果您在重新引导时不分离磁盘,那么当您尝试重新连接磁盘时,它会显示“文件正在使用中,无法访问”。

因此,我们需要自动挂载和卸载。卸载证明有些麻烦,因为我不能将其放在启动文件夹中。您必须使用组策略。另外,当作为“关机/启动”脚本运行时,它运行得很早,您需要在“登录/注销”下运行它

我有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 '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.