Виявлення букви диска останнього встановленого файлу xvhd або vhd у пакеті?


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накопичувач, видалити з нього більшість профілів користувачів (обробляється окремою резервною копією), а потім відключити її, щоб її можна було створити за допомогою іншої програми та відновити на машині у разі катастрофи; (також я б відновив профілі користувачів із окремої резервної копії ).

Відповіді:


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

Подальші ресурси


Ви повинні мати можливість використовувати GET-DISKIMAGE filename.vhd | GET-DISK | GET-PARTITIONсинтаксис і просто включити його в динамічний сценарій, щоб відповідно працювати з Powershell. Я припускаю, що ви знайомі з пакетними сценаріями та Powershell, але дайте мені знати, якщо вам потрібна допомога з цією частиною - це непросте завдання.
Pimp Juice IT

Ах! Вибачте, що я змінив деякі речі ... про те, що я вже спробував ... так що ви кажете, що слід використовувати PowerShell замість цього?
leeand00

1
@ leeand00 Просто включіть команди Powershell у пакетний сценарій відповідно. Я додам оновлений приклад ... дайте мені секунду ...
Pimp Juice IT

@ leeand00 Немає проблем, мені довелося подбати про деякі речі, так шкода очікування. Сподіваємось, це допоможе вам відповідно запустити з пакетного сценарію. Я використовую його аналогічно з іншими сценаріями для моїх потреб у деяких випадках. Я щойно сказав йому, щоб встановити літеру диска як змінну, а потім зробити a CD /Dдо цього шляху, але ви також можете використовувати його як "%DriveLetter%:\"і використовувати його для частини букви диска у ваших явно зазначених шляхах у вашій сценарії сценаріїв. Дайте мені знати, як це відбувається, коли ви дістанетесь до нього. Я прокоментував логіку кріплення ISO, але залишив її там, якщо хтось інший використовує ISO і потребує цього.
Pimp Juice IT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.