Cómo desmontar un VHD a través de la línea de comandos en Windows 10

9

Necesito desmontar un VHD con un script por lotes en Windows 10. La única solución que encontré en línea fue dirigida a Windows 7 e involucró a Diskpart. ¿Hay alguna otra herramienta de línea de comandos nativa de Windows disponible que pueda hacer el trabajo?

Zerobinary99
fuente
en cmd puede ser complicado. No conozco Powershell, pero Powershell hace mucho ... por ejemplo, muchos enlaces dicen que Powershell puede hacer lo que quieras virtualizationadmin.com/kbase/VirtualizationTips/… y technet.microsoft.com/en-us/library/hh848562(v=wps .630) .aspx
barlop
@barlop Gracias por tu comentario y los enlaces. El lote debe poder ejecutarse en un sistema donde Powershell no está instalado, por lo que me temo que no es una opción.
Zerobinary99
¿Hay alguna razón en particular por la que no quieras usar diskpart? por ejemplo, puede ejecutarse de manera no interactiva, por lo que podría tener un archivo por lotes que muestre un script de diskpart en un archivo script.txt, luego haga diskpart / s script.txt. Aquí hay un ejemplo de un script de diskpart technet.microsoft .com / es-us / library / dn614984.aspx
barlop
@barlop Soy consciente de la solución diskpart y actualmente la estoy usando en un sistema diferente. En el que se pretende que esto funcione no tiene parte de disco.
Zerobinary99
Creo que sería bastante difícil incluso encontrar un tercero que lo haga. Los comandos nativos son bastante conocidos, estoy seguro de que no hay ninguno que lo haga aparte de diskpart. Es casi un milagro que diskpart lo haga. (dado que diskpart es un programa tan "simple" como lo era fdisk, y la gente tiende a usarlo sin darse cuenta de la opción. La idea de que haya otro comando nativo que lo haga, es casi impensable. Si puede poner un archivo por lotes de ahí, puede que no poner un programa como diskpart ahí?
barlop

Respuestas:

6

Como no he encontrado una manera de confiar únicamente en las herramientas de línea de comandos instaladas por MS, enumeraré soluciones de terceros.


WinApiExec

WinApiExec permite al usuario llamar a la API de Windows desde la línea de comandos. El ejecutable de 32 bits tiene un tamaño de solo 3.5 KB (x64: 5.5 KB) y, por lo tanto, es ridículamente pequeño, con la menor sobrecarga posible.

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 admite bastantes funciones relacionadas con VHD. Su tamaño (x86: 432KB; x64: 2.53MB) es bastante grande simplemente por llamar a WinApi, por lo que no es una solución para mi escenario, pero podría ser útil para otras personas.

vmount detach \\.\PhysicalDriveX

DiskPart

En aras de la exhaustividad, DiskPart también se mencionará. Es compatible con una gran cantidad de características relacionadas con el disco, pero tiene una forma bastante lenta de automatizar la entrada del usuario que de otro modo sería necesaria para fines de secuencias de comandos. También es la única herramienta en la lista que quedará atrapada en un bucle si accidentalmente ejecuta el script sin derechos elevados.

Guarde las siguientes dos líneas en un archivo de texto:

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

Ahora, Dism puede analizar el archivo de texto como una forma de archivo de respuesta desatendida:

DISKPART /s C:\Path_to\Name_Of_Textfile.txt
Zerobinary99
fuente
3

Puede montar y desmontar vhd / vhdx utilizando Windows 10 Powershell nativo:

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

De cmd / bat:

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

En cualquier caso, debe usar un mensaje elevado (Ejecutar como administrador).

Otra cosa a tener en cuenta es que primero debe habilitar la función Hyper-V .

Anton Krouglov
fuente
De mi comentario a mi pregunta: "El lote debe poder ejecutarse en un sistema donde Powershell no está instalado, así que me temo que no es una opción".
Zerobinary99
Hasta donde sé, Powershell es una parte integral de Windows 10 (usted ha preguntado sobre Windows 10), por lo que no puede instalarlo ni desinstalarlo. Sin embargo, su ejecución puede bloquearse por varios medios, como la Política de grupo.
Anton Krouglov el
¿Por qué cuestionas las condiciones? Hay una razón para ellos. Estoy ejecutando un Windows Lite sin Powershell y soy reacio a mantener una plataforma completa que no necesito si hay más opciones de peso ligero disponibles
Zerobinary99
1
Tengo el problema similar. Google ha arrojado su vieja pregunta. Por lo tanto, esta respuesta también puede ser útil para otras personas.
Anton Krouglov el
Dado que esta pregunta tiene más de dos años y el título es vago con respecto a sus requisitos, esta respuesta ayuda a muchas otras personas al igual que mi respuesta ampliada. Debería leer más Meta Exchange para obtener más información sobre cómo funciona este sitio y sus políticas. Este tipo de respuestas son muy útiles para la comunidad @ Zerobinary99
FreeSoftwareServers
1

Esta es una respuesta ampliada: (Debería poder aprender cómo desmontar VHD)

Cómo Montar y desmontar automáticamente archivos VHD en el arranque / apagado.

Las cosas parecen haber cambiado un poco en Windows 10.

Primero, debo decir que estoy montando un VHD almacenado en un servidor de archivos Linux, montándolo sobre SMB.

En segundo lugar, muy importante, es que si no desconecta el disco al reiniciar, cuando intenta volver a conectarlo, dice "El archivo está en uso y no se puede acceder".

Por eso necesitamos tanto el montaje automático como el desmontaje. El desmontaje resultó un poco más complicado, ya que no puedo ponerlo en la carpeta de inicio. Tienes que usar la Política de grupo. Además, cuando se ejecuta como un script de "apagado / inicio", se ejecutó antes de tiempo, debe ejecutarlo en "Iniciar sesión / Cerrar sesión"

Tengo 4 archivos en 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

Ahora en inicio escriba / ejecutar gpedit.mscy agregue los scripts para iniciar / cerrar sesión

ingrese la descripción de la imagen aquí

FreeSoftwareServers
fuente
Gracias por la respuesta, pero esta no es una solución al problema. Estaba buscando una solución compatible con lotes además de usar Diskpart. Básicamente, acabas de pegar la misma sintaxis que ya está en mi respuesta.
Zerobinary99
¿Aparte de usar la función integrada de Windows sin usar herramientas de terceros? Parece oximorónico.
FreeSoftwareServers
Estaba preguntando por otras funciones nativas de Windows. No hay nada oxímoron en eso. Me parece que tienes problemas de comprensión general.
Zerobinary99