我发现这些方便的方法在命令提示符/批处理文件中挂载/卸载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
批量查找最近安装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 文件的驱动器号,以便您可以将其用作变量名将 CD 放到目录中以隐式运行您的命令,或者您可以使用它以其他方式明确设置驱动器号,以满足您将使用它的命令的需要,等等。
脚本
@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
更多资源
答案2
一行命令检测 VHD 所安装的磁盘号并将其分配给环境变量:
FOR /f usebackq %a in (`powershell -c "GET-DISKIMAGE 'D:\VirtualHardDisk.vhd' | GET-DISK | GET-PARTITION | GET-VOLUME |
Select -ExpandProperty DriveLetter"`) DO SET VHDDrive=%a
ECHO The VHD's drive letter: %VHDDrive%:\
谢谢@Vomit IT - Chunky Mess 风格用于命令。