2

Я нашел эти удобные способы для монтирования / размонтирования xvhd или vhd в командной строке / командном файле.

Тем не мение; это все еще оставляет меня с одним вопросом; при условии, что я указываю файл, который хочу подключить напрямую; Как узнать, какая буква диска была назначена с помощью командной строки?

Так что, если я могу зайти в DiskPart и выполнить следующие команды:

DISKPART> select vdisk FILE="F:\WindowsImageBackup\leeand00-pc\Backup 2017-01-10 031515\924cde0a-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.

Тогда я не могу сразу назначить букву диска вновь присоединенному тому ... однако я могу выбрать его, вызвав его по номеру тома:

DISKPART> SELECT Volume 8

Volume 8 is the selected volume.

DISKPART> ASSIGN LETTER=X

DiskPart successfully assigned the drive letter or mount point.

Видя, как я хочу запустить это как скрипт ... как получается, что я могу выбрать только что смонтированный xvhd и назначить ему букву диска?

Люди постоянно используют систему букв дисков, сопоставляя и распаковывая общие ресурсы, а также вставляя / извлекая флэш-накопители.

Итак, как я могу безопасно это сделать, учитывая, что проблемы с сопоставлением дисков, вероятно, противоречивы, и тот факт, что при создании резервной копии состояния системы он не назначает метке мой том?

PS Моя цель здесь состоит в том, чтобы автоматизировать это, чтобы его можно было вызвать с помощью скрипта, сделать резервную копию состояния системы (что мне уже удалось), а затем смонтировать xvhd диска, удалить из него большинство пользовательских профилей ( обрабатывается отдельной резервной копией), а затем размонтируется, чтобы ее можно было скопировать другой программой и восстановить на машине в случае аварии; (также я бы восстановил профили пользователей из отдельной резервной копии).

1 ответ1

2

Поиск буквы диска для последнего смонтированного xvhd или vhd в пакете? Как узнать, какая буква диска была назначена с помощью командной строки?

Передайте вывод Get-DiskImage в Get-Volume или Get-Disk и Get-Partition:

Для файла ISO:

GET-DISKIMAGE filename.iso | GET-VOLUME

Для файла VHD:

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

Источник


пример

Основываясь на предоставленной вами статье, я включил логику PowerShell в приведенный ниже пакетный сценарий, чтобы включить динамическое получение буквы диска, используемой для монтирования файла VHD или ISO, чтобы затем вы могли использовать ее в качестве имени переменной для компакт-диска в каталоге для запуска вашей команды неявно или вы можете использовать его иначе, чтобы явно установить букву диска для того, что вам нужно для команд, с которыми вы будете его использовать, и т. д.

скрипт

@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

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .