I found these handy ways to mount/unmount a xvhd
or vhd
file in a command prompt / batch file.
However; that still leaves me with one question; assuming I'm specifying the file I want to mount directly; how do I find out what drive letter it was assigned using the command prompt?
So if I can go into DiskPart
and run the following commands:
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.
Then I can't assign the drive letter immediately to the newly attached volume...however, I can select it by calling it out by it's volume number:
DISKPART> SELECT Volume 8
Volume 8 is the selected volume.
DISKPART> ASSIGN LETTER=X
DiskPart successfully assigned the drive letter or mount point.
Seeing as I want to run this as a script...how is it that I can select the newly mounted xvhd
and assign it a drive letter?
People screw around with the drive letter system all the time, by mapping and unmapping shares, and by inserting / removing thumb drives.
So how can I safely do this considering the issues with the drive mapping being probably inconsistent, and the fact that when I create a system state backup, it doesn't assign my volume a label?
P.S. My goal here is to automate this so it can be called by a script, do a system state backup (which I've already succeeded at), and then mount the xvhd
of the drive, delete most of the user profiles from it (handled by a separate backup) and then unmount it so it can be backed up by another program, and restored to the machine in the event of a disaster; (also I would restore the user profiles from a separate backup).
Answer
Finding the drive letter of the most recently mounted xvhd
or vhd
file in batch? How do I find out what drive letter it was assigned using the command prompt?
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
Example
Based on the article you provided I incorporated the PowerShell logic into the below batch script to include dynamically getting the drive letter used to mount the VHD or ISO file so you can then use that as a variable name to CD to the directory to run your command implicitly or you can use it otherwise to explicitly set the drive letter for whatever you need it for the commands you'll use it with, 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%:\"
ENDLOCAL
No comments:
Post a Comment