Localizando a letra da unidade do arquivo xvhd ou vhd mais recentemente montado em lote?

2

Eu encontrei essas maneiras práticas de montar / desmontar um arquivo xvhd ou vhd em um prompt de comando / arquivo em lote.

No entanto; que ainda me deixa com uma pergunta; assumindo que estou especificando o arquivo que quero montar diretamente; Como faço para descobrir qual letra de unidade foi atribuída usando o prompt de comando?

Então, se eu puder entrar em DiskPart e executar os seguintes comandos:

DISKPART> select vdisk FILE="F:\WindowsImageBackup\leeand00-pc\Backup 2017-01-10 0315154cde0a-0000-0000-0000-50c603000000.vhdx"

DiskPart successfully selected the virtual disk file.

DISKPART> ATTACH VDISK

  100 percent completed

DISKPART> LIST VOLUME

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     E                       DVD-ROM         0 B  No Media
  Volume 1     H                       DVD-ROM         0 B  No Media
  Volume 2         SYSTEM RESE  NTFS   Partition    100 MB  Healthy    System
  Volume 3     C                NTFS   Partition    159 GB  Healthy    Boot
  Volume 4     F   wbadmin_bac  NTFS   Partition     57 GB  Healthy
  Volume 5         PQSERVICE    NTFS   Partition     15 GB  Healthy    Hidden
  Volume 6     G   FreeAgent D  NTFS   Partition   1397 GB  Healthy
  Volume 7     D                       Removable       0 B  No Media
  Volume 8                      NTFS   Partition    159 GB  Healthy

DISKPART> ASSIGN LETTER=X

There is no volume specified.
Please select a volume and try again.

Então não posso atribuir a letra da unidade imediatamente ao volume recém-anexado ... no entanto, posso selecioná-lo chamando-o pelo seu número de volume:

DISKPART> SELECT Volume 8

Volume 8 is the selected volume.

DISKPART> ASSIGN LETTER=X

DiskPart successfully assigned the drive letter or mount point.

Veja como eu quero executar isso como um script ... como é que eu posso selecionar o recém-montado xvhd e atribuir-lhe uma letra de unidade?

As pessoas trabalham com o sistema de letras de unidade o tempo todo, mapeando e desmapeando compartilhamentos e inserindo / removendo pen drives.

Então, como posso fazer isso com segurança, considerando que os problemas com o mapeamento da unidade provavelmente são inconsistentes, e o fato de que quando eu crio um backup de estado do sistema, ele não atribui um rótulo ao meu volume?

P.S. Meu objetivo aqui é automatizar isso para que ele possa ser chamado por um script, faça um backup de estado do sistema (que eu já tive sucesso) e monte o xvhd da unidade, exclua a maioria dos perfis de usuário dele (manipulado por um backup separado) e, em seguida, desmontá-lo para que possa ser feito backup por outro programa e restaurado para a máquina no caso de um desastre; (também restauraria perfis de usuário de um backup separado ).

    
por leeand00 10.01.2017 / 04:22

1 resposta

2

Localizando a letra da unidade dos xvhd ou vhd montados mais recentemente arquivo em lote? Como faço para descobrir qual letra de unidade foi atribuída usando o prompt de comando?

Pipe the output of Get-DiskImage to Get-Volume or Get-Disk and Get-Partition:

For an ISO file:

GET-DISKIMAGE filename.iso | GET-VOLUME

For a VHD file:

GET-DISKIMAGE filename.vhd | GET-DISK | GET-PARTITION

Source

Exemplo

Com base no artigo que você forneceu, incorporei a lógica do PowerShell ao script de lote abaixo para incluir dinamicamente a letra da unidade usada para montar o arquivo VHD ou ISO, para que você possa usá-la como um nome de variável para CD o diretório para executar o seu comando implicitamente ou você pode usá-lo para definir explicitamente a letra da unidade para o que você precisa para os comandos que você vai usá-lo, etc.

Script

@ECHO OFF

SETLOCAL

SET DiskPartScript="%TEMP%DiskpartScript.txt"

ECHO SELECT VDISK FILE="%~1" > %DiskPartScript% 
ECHO ATTACH VDISK >> %DiskPartScript%

DiskPart /s %DiskPartScript%

SET PowershellScript="%TEMP%\PowerShellScript.ps1"

:: -- Use below for VHD 
ECHO GET-DISKIMAGE "%~1" | GET-DISK | GET-PARTITION | Select -ExpandProperty DriveLetter > "%PowershellScript%" 

:: -- Use below for ISO 
::ECHO GET-DISKIMAGE "%~1" | get-VOLUME | Select -ExpandProperty DriveLetter > "%PowershellScript%"

SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 
CD /D "%PowerShellDir%" 
FOR /F "DELIMS=" %%A IN ('Powershell -ExecutionPolicy Bypass -Command "& '%PowershellScript%'"') DO SET "DriveLetter=%%A"

CD /D "%DriveLetter%:\" 
<Commands> 
<Commands>

ENDLOCAL

Mais recursos

por 10.01.2017 / 05:31