批量查找最近挂载的xvhd或vhd文件的驱动器号?

批量查找最近挂载的xvhd或vhd文件的驱动器号?

我发现这些方便的方法在命令提示符/批处理文件中挂载/卸载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

批量查找最近安装xvhdvhd 文件的驱动器号?如何使用命令提示符找出为其分配的驱动器号?

将 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 风格用于命令。

相关内容