如何获取使用Mount-DiskImage挂载的ISO I的驱动器号

时间:2013-05-09 01:27:36

标签: powershell

我通过Mount-DiskImage命令安装了ISO I。但是,我不知道如何获取已安装磁盘映像的驱动器号。我试试$mountResult = Mount-DiskImage D:\ISOs\clonezilla-live-1.2.12-10-i486.iso -PassThru。返回的信息都不是驱动器号,如下所示:

PS C:\Windows\system32> $mountResult | fl *


Attached              : False
BlockSize             : 0
DevicePath            : 
FileSize              : 110100480
ImagePath             : D:\ISOs\clonezilla-live-1.2.12-10-i486.iso
LogicalSectorSize     : 2048
Number                : 
Size                  : 110100480
StorageType           : 1
PSComputerName        : 
CimClass              : ROOT/Microsoft/Windows/Storage:MSFT_DiskImage
CimInstanceProperties : {Attached, BlockSize, DevicePath, FileSize...}
CimSystemProperties   : Microsoft.Management.Infrastructure.CimSystemProperties

PS C:\Windows\system32> $mountResult | select -ExpandProperty CimSystemProperties | fl *


Namespace  : ROOT/Microsoft/Windows/Storage
ServerName : ECHO-BASE
ClassName  : MSFT_DiskImage
Path       : 

之后调用Get-DiskImage D:\ISOs\clonezilla-live-1.2.12-10-i486.iso也不会返回驱动器号。

如何获取驱动器号?

6 个答案:

答案 0 :(得分:45)

试试这个:

$mountResult = Mount-DiskImage D:\ISOs\clonezilla-live-1.2.12-10-i486.iso -PassThru
$mountResult | Get-Volume

这将返回ISO分配给哪个驱动器号以及其他信息 - 从那里只是解析输出。

编辑: 这将返回驱动器号:     

$driveLetter = ($mountResult | Get-Volume).DriveLetter

答案 1 :(得分:3)

我发现这个工作

$beforeMount = (Get-Volume).DriveLetter

$mountResult = Mount-DiskImage $imagePath

$setuppath = (compare $beforeMount (Get-Volume).DriveLetter -PassThru) + ":\"

答案 2 :(得分:3)

仅供参考我在重新安装相同图像时遇到问题所以我进行了一些小改动,检查图像是否已经安装,如果没有安装并给出音量。

$ImagePath= " " ## Path of ISO image to be mounted 
$ISODrive = (Get-DiskImage -ImagePath $ImagePath | Get-Volume).DriveLetter
IF (!$ISODrive) {
Mount-DiskImage -ImagePath $ImagePath -StorageType ISO
}
$ISODrive = (Get-DiskImage -ImagePath $ImagePath | Get-Volume).DriveLetter
Write-Host ("ISO Drive is " + $ISODrive)

答案 3 :(得分:1)

我不完全确定它是否属于这里,但考虑到了 我会说它的问题和答案。

斜体:从COMMAND PROMPT复制。

假设

当我们谈论安装时,我们通常会谈论安装(虚拟)磁盘,我们有DISKPART.EXE,或安装文件,如.WIM和.SWM,我们有DISM.EXE(IMAGEX.EXE),或者第三方软件,如NTLite',或者它涉及像.ISO这样的CD和DVD图像。据我所知。除非使用第三方软件,否则.ISO文件始终只读。因此.ISO文件是最不灵活的文件,因此我从假设当时要求提供一个正确和完整的源文件路径的一个或多个复制命令,一个find命令,或者一个读取命令,它们中的每一个取决于到源文件的明确定义的路径,而不一定是安装图像的路径。

一种可能的解决方案#

c:\windows\system32>powershell.exe mount-diskimage -imagepath
"d:\blah\vlah.iso" -confirm -passthru

Attached           : True
Blocksize          : 0
Devicepath         : \\.\CDROM0 <<== Object of interest, since COPY.EXE
Filesize           : 4586569728           won't recurse and XCOPY.EXE
Imagepath          : "d:\blah\vlah.iso"   won't accept it as a valid 
Logicalsectorsize  : 2048                 path, however ROBOCOPY.EXE
Number             : 0                 will accept it and then it does 
Size               : 4586569728        do what I demand of it, copy the  
Storagetype        : 1                 contents of the  mounted .ISO
Pscomputername     :

xcopy \\.\CDROM0\*.* C:\new /h /i /c /k /e /r /y /f /b
Invalid drive specification
0 File(s) copied

Robocopy \\.\CDROM0 C:\new /E /ZB /COPYALL /256 /R:3 /W:1 /X /V /TS  
/FP /NP /ETA /LOG:w:\ROBO.LOG /TEE /NJH

可以说,这个组合对于回答这个问题最有效,并解决问题,因为POWERSHELL.EXE不会打开这个问题,所以所有的反馈&#39; stdout& #39;和&#39; stderr&#39;,如果允许,将出现在一个窗口中),同时它会传递给我们&#39; stdout&#39;这使得必须获得一个多余的驱动器号文件和/或命令浪费时间。如果我是正确的设备路径&#39;将永远是相同的,虽然我没有检查过,我不能说这是否只是在我的电脑上的情况。

通过COMMAND PROPMT使用POWERSHELL.EXE的问题

但有一个问题,可能是我的电脑,但最好重复POWERSHELL.EXE命令,因为大多数时候我和我的批处理文件&#39; Attached:False&#39; 是第一次尝试的结果,包括装载,( false ),以及“卸载”#39;图像,( true )。这将导致我或您的批量文件执行错误。看起来像是这样的:&#39;系统找不到指定的路径。&#39; 这将是另一个命令将引用预期的“挂载点”的时刻。和图像。

ADDENDUM 05-feb-2017:我发现使用\。\ CDROMX的解决方案似乎仅在添加/ 256时才起作用,否则可能会失败,并显示以下消息:

2017/02/05 01:11:15 ERROR 53(0x00000035)访问源目录\。\ CDROM0 \ 找不到网络路径。

我希望这可以帮助人们,这对我来说已经帮助了我,在记事本长线设置之后:72在stackoverflow上创建了一个丑陋的布局。

答案 4 :(得分:0)

这对我有用:

$beforeMount = (Get-Volume).DriveLetter
$imagePath = 'C:\dsc\en_windows_server_2016_x64_dvd_9718492.iso'
$mountResult = Mount-DiskImage $imagePath
$afterMount = (Get-Volume).DriveLetter
$setuppath = "$(($afterMount -join '').replace(($beforeMount -join ''), '')):\"

答案 5 :(得分:0)

嗯..为什么这么复杂?

Mount-DiskImage D:\cd.iso -PassThru | Get-Volume