Como desmontar um VHD via linha de comando no Windows 10

9

Preciso desmontar um VHD com um script em lote no Windows 10. A única solução que encontrei on-line foi direcionada ao Windows 7 e envolveu o Diskpart. Existem outras ferramentas de linha de comando nativas do Windows disponíveis que podem fazer o trabalho?

Zerobinary99
fonte
em cmd pode ser complicado. Não sei o powershell, mas o powershell faz muito .. por exemplo, muitos links dizem que o powershell pode fazer o que você deseja virtualizationadmin.com/kbase/VirtualizationTips/… e technet.microsoft.com/en-us/library/hh848562(v=wps .630) .aspx
barlop
@ Barlop Obrigado pelo seu comentário e pelos links. O lote precisa ser capaz de executar em um sistema onde o Powershell não está instalado, então, receio que não seja uma opção.
Zerobinary99
Existe alguma razão específica para você não querer usar o diskpart? por exemplo, ele pode ser executado de maneira não interativa, para que você possa ter um arquivo em lote que reproduz um script diskpart em um arquivo script.txt, e então diskpart / s script.txt, há um exemplo de script diskpart aqui technet.microsoft .com / pt-br / library / dn614984.aspx
barlop em 31/08/2015
@ Barlop Estou ciente da solução diskpart e atualmente estou usando-a em um sistema diferente. O local em que isso se destina a trabalhar não possui parte do disco.
precisa saber é o seguinte
Eu acho que seria difícil o suficiente encontrar um terceiro que o faça. Comandos nativos são bastante conhecidos, tenho certeza de que não há nenhum que faça isso além do diskpart. É quase um milagre que o diskpart faça isso. (como o diskpart é um programa "simples", como o fdisk, e as pessoas tendem a usá-lo sem perceber a opção. A idéia de que existe outro comando nativo que o faria é quase impensável. Se você pode colocar um arquivo em lotes lá, você não pode colocar um programa como o diskpart lá?
barlop

Respostas:

6

Como não encontrei uma maneira de confiar apenas nas ferramentas de linha de comando instaladas pela MS, listarei soluções de terceiros.


WinApiExec

WinApiExec permite que o usuário chame a API do Windows na linha de comando. O executável de 32 bits tem apenas 3,5 KB de tamanho (x64: 5,5 KB) e, portanto, ridiculamente pequeno, introduzindo o mínimo de sobrecarga possível.

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

O vMount suporta várias funções relacionadas ao VHD. Seu tamanho (x86: 432KB; x64: 2.53MB) é bastante grande apenas para chamar o WinApi; portanto, não é uma solução para o meu cenário, mas pode ser útil para outras pessoas.

vmount detach \\.\PhysicalDriveX

DiskPart

Por uma questão de integridade, DiskPart também deve ser mencionado. Ele suporta muitos recursos relacionados ao disco, mas possui uma maneira bastante lenta de automatizar a entrada de usuário necessária para fins de script. Também é a única ferramenta na lista que ficará presa em loop se você executar acidentalmente o script sem direitos elevados.

Salve as duas linhas a seguir em um arquivo de texto:

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

Agora, o Dism pode analisar o arquivo de texto como uma forma de arquivo de resposta autônomo:

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

Você pode montar e desmontar vhd / vhdx usando o 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'"

Em qualquer um dos casos, você deve usar o prompt elevado (Executar como administrador).

Outro aspecto a ser observado é que você precisa habilitar o recurso Hyper-V primeiro .

Anton Krouglov
fonte
Do meu comentário à minha pergunta: "O lote precisa ser capaz de executar em um sistema em que o Powershell não está instalado, portanto, receio que não seja uma opção".
precisa saber é o seguinte
Tanto quanto sei, o Powershell é parte integrante do Windows 10 (você perguntou sobre o Windows 10), portanto, não pode instalá-lo ou desinstalá-lo. No entanto, sua execução pode ser bloqueada por vários meios, como Diretiva de Grupo.
Anton Krouglov 06/04
Por que você está questionando as condições? Há uma razão para eles. Estou executando um Windows Lite sem PowerShell e eu sou avesso a manter uma plataforma inteira que eu não preciso se existem opções de peso mais leves disponíveis
Zerobinary99
11
Estou com o mesmo problema. Pesquisar no Google fez sua pergunta antiga. Portanto, essa resposta também pode ser útil para outras pessoas.
Anton Krouglov 07/04
Como essa pergunta tem mais de dois anos e o título é vago em relação às suas necessidades, essa resposta ajuda muitas outras pessoas, assim como minha resposta expandida. Você deve ler mais Meta sobre troca de pilhas para saber mais sobre como este site opera e suas políticas. Este tipo de respostas são muito úteis para a comunidade @ Zerobinary99
FreeSoftwareServers
1

Esta é uma resposta expandida: (Você deve conseguir entender como desmontar VHD)

Como montar automaticamente e desmontar arquivos VHD na inicialização / desligamento.

As coisas parecem ter mudado um pouco no Windows 10.

Primeiro, devo dizer que estou montando um VHD armazenado em um servidor de arquivos Linux, montado em SMB.

Segundo, muito importante, é que, se você não desconectar o disco durante a reinicialização, quando tentar reconectá-lo, será exibido "O arquivo está em uso e não pode ser acessado".

Então, precisamos de montagem e desmontagem automáticas. A desmontagem se mostrou um pouco mais complicada, já que eu não posso colocá-lo na pasta de inicialização. Você precisa usar a Diretiva de Grupo. Além disso, quando executado como um script "shutdown / startup", foi executado cedo, você deve executá-lo em "Logon / Logoff"

Tenho 4 arquivos em 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

Agora, no início, digite / execute gpedit.msce adicione os scripts ao logon / logoff

insira a descrição da imagem aqui

FreeSoftwareServers
fonte
Obrigado pela resposta, mas esta não é uma solução para o problema. Eu estava procurando uma solução compatível com lotes, além de usar o Diskpart. Você basicamente colou a mesma sintaxe que já está na minha resposta.
precisa saber é o seguinte
Além de usar a função interna do Windows sem usar ferramentas de terceiros? Parece oximorônico.
FreeSoftwareServers
Eu estava pedindo outras funções nativas do Windows. Não há nada de oximorônico nisso. Parece-me que você tem problemas de compreensão geral.
precisa saber é o seguinte