Как отключить VHD через командную строку в Windows 10

9

Мне нужно размонтировать виртуальный жесткий диск с помощью пакетного скрипта в Windows 10. Единственное решение, которое я нашел в Интернете, было направлено на Windows 7 и включало Diskpart. Существуют ли другие доступные инструменты командной строки Windows, которые могут выполнить эту работу?

Zerobinary99
источник
в CMD может быть сложно. Я не знаю PowerShell, но PowerShell делает так много. Например, многие ссылки говорят, что PowerShell может делать то, что вы хотите virtualizationadmin.com/kbase/VirtualizationTips/… и technet.microsoft.com/en-us/library/hh848562(v=wps .630) .aspx
barlop
@barlop Спасибо за ваш комментарий и ссылки. Пакет должен быть в состоянии работать в системе, где не установлен Powershell, поэтому я боюсь, что это не вариант.
Zerobinary99
Есть ли какая-то конкретная причина, почему вы не хотите использовать diskpart? Например, он может работать неинтерактивным способом, поэтому вы можете получить пакетный файл, который выводит сценарий diskpart в файл script.txt, а затем выполняет diskpart / s script.txt. Здесь приведен пример сценария diskpart technet.microsoft .com / en-us / library / dn614984.aspx
barlop
@barlop Я знаю о diskpart-решении и сейчас использую его в другой системе. Тот, на котором это предназначено для работы, не имеет дисковой части.
Zerobinary99
Я думаю, что было бы достаточно сложно даже найти стороннего, который это делает. Нативные команды довольно хорошо известны, я уверен, что нет никаких, которые делают это, кроме diskpart. Это почти чудо, что это делает diskpart. (поскольку diskpart - такая «простая» программа, как и fdisk, и люди склонны использовать ее, не замечая этого параметра. Идея, что есть другая нативная команда, которая сделает это, почти немыслима. Если вы можете поместить командный файл там, разве вы не можете поставить такую ​​программу, как diskpart?
barlop

Ответы:

6

Поскольку я не нашел способа полагаться исключительно на средства командной строки, установленные MS, я перечислю сторонние решения.


WinApiExec

WinApiExec позволяет пользователю вызывать Windows API из командной строки. Размер 32-битного исполняемого файла составляет всего 3,5 КБ (x64: 5,5 КБ), и поэтому он смехотворно мал, создавая как можно меньшие накладные расходы.

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. Он поддерживает множество функций, связанных с дисками, но имеет довольно медленный способ автоматизировать другие необходимые пользовательские вводы для сценариев. Это также единственный инструмент в списке, который будет зацикливаться, если вы случайно запустите сценарий без повышенных прав.

Сохраните следующие две строки в текстовый файл:

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

Теперь Dism может анализировать текстовый файл как форму файла ответов без присмотра:

DISKPART /s C:\Path_to\Name_Of_Textfile.txt
Zerobinary99
источник
3

Вы можете монтировать и размонтировать VHD / VHDX, используя Windows 10 Powershell:

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
Насколько мне известно, Powershell является неотъемлемой частью Windows 10 (вы спрашивали о Windows 10), поэтому вы не можете установить или удалить ее. Однако его выполнение может быть заблокировано различными способами, такими как групповая политика.
Антон Кроуглов,
Почему вы ставите под сомнение условия? Есть причина для них. Я использую Windows Lite без Powershell и не хочу использовать всю платформу, которая мне не нужна, если есть более легкие варианты
Zerobinary99
1
У меня есть похожая проблема. У Google есть ваш старый вопрос. Так что этот ответ может быть полезен и другим людям.
Антон Кроуглов
Поскольку этому вопросу уже более двух лет и название нечеткое в отношении ваших требований, этот ответ помогает многим другим людям, равно как и мой расширенный ответ. Вы должны прочитать больше Мета обмена стека, чтобы узнать больше о том, как этот сайт работает и его политики. Подобные ответы очень полезны для сообщества @ Zerobinary99
FreeSoftwareServers
1

Это расширенный ответ: (Вы должны быть в состоянии понять, как размонтировать VHD)

Как автоматически монтировать и размонтировать VHD файлы при загрузке / выключении.

В Windows 10 все немного изменилось.

Во-первых, я должен сказать, что я монтирую виртуальный жесткий диск, хранящийся на файловом сервере Linux, и монтирую поверх SMB.

Во-вторых, очень важно, что если вы не отсоединяете диск после перезагрузки, то, когда вы пытаетесь повторно подключить его, он говорит: «Файл используется и недоступен».

Таким образом, нам нужно как автосмонтировать, так и размонтировать. Размонтирование оказалось немного сложным, поскольку я не могу просто положить его в папку автозагрузки. Вы должны использовать групповую политику. Кроме того, когда он запускается как скрипт «завершение работы / запуск», он запускается слишком рано, его нужно запустить в «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

Теперь в start введите / run gpedit.mscи добавьте сценарии для входа / выхода

введите описание изображения здесь

FreeSoftwareServers
источник
Спасибо за ответ, но это не решение проблемы. Я искал пакетно-совместимое решение помимо использования Diskpart. Вы просто вставили тот же синтаксис, который уже есть в моем ответе.
Zerobinary99
Помимо использования встроенной функции Windows без использования сторонних инструментов? Кажется оксимороновой.
FreeSoftwareServers
Я просил другие функции Windows. В этом нет ничего оксюморонного. Сдается мне, что у вас есть общие проблемы с пониманием.
Zerobinary99