2013-05-09 523 views
16

我通過Mount-DiskImage命令進行了ISO I mount安裝。但是,我不知道如何獲取裝入的磁盤映像的驅動器號。我嘗試$mountResult = Mount-DiskImage D:\ISOs\clonezilla-live-1.2.12-10-i486.iso -PassThru。被返回的信息都不是如下圖所示的驅動器盤符:我如何獲得用Mount-DiskImage安裝的ISO I的驅動器盤符

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-DiskImageD:\ISOs\clonezilla-live-1.2.12-10-i486.iso後不返回的驅動器盤符無論是。

如何獲取驅動器號?

回答

32

試試這個:

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

這將返回該驅動器號ISO被分配到與其他信息一起 - 從那裏它只是一個解析輸出的問題。

編輯: 這將只返回驅動器盤符:

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

+0

Ahhhhhhhhhhhhhhhhhhhh +1 – x0n 2013-05-09 14:45:45

+0

@ParrotMac你知道的一種方式來指定特定的驅動器盤符? – Fnord 2014-06-30 23:21:55

+0

@Fnord也許這可能有幫助?安裝,然後使用這個結果:[通過簡單的PowerShell命令更改驅動器號和標籤](http://blogs.technet.com/b/heyscriptingguy/archive/2011/03/14/change-drive-letters- and-labels-via-a-simple-powershell-command.aspx) – ParrotMac 2014-07-01 07:02:21

3

我發現這個工作

$ beforeMount =(獲得批量).DriveLetter

$ mountResult =安裝,磁盤鏡像$ imagePath

$ setuppath =(compare $ beforeMount(Get-Volume).DriveLetter -PassThru)+「:」

1

僅供參考我有一個問題再次安裝相同的圖像,所以我做了一個小小的改變,它檢查是否圖像已經安裝,如果沒有安裝和提供音量。

$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) 
1

我不完全肯定它是否屬於這裏,但考慮到 問題和答案,我會說是的。

斜體:從COMMAND PROMPT複製。

假設

當我們談論安裝,我們通常講的安裝(虛擬)磁盤,爲此我們DISKPART.EXE,或安裝文件,如.WIM和.SWM,爲此我們DISM.EXE( IMAGEX.EXE)或第三方軟件(如「NTLite」),或者它涉及CD和DVD圖像,如.ISO。據我所知。除非使用第三方軟件,否則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將不會打開一個「鬼」,(所以所有反饋'stdout'和'stderr'在允許的情況下會出現在一個窗口中),同時它提供了'stdout',這使得必須獲得一個多餘文件的驅動器盤符和/或浪費時間。如果我是正確的,'devicepath'將始終是相同的,雖然我沒有檢查過,但我不能說這是否只是在我的電腦上的情況。

發佈關於中POWERSHELL.EXE通過命令PROPMT的使用雖然

的一個問題,這可能是我的電腦,但更好的重複POWERSHELL.EXE命令,因爲我和我的批處理文件,大部分次'附:False'是第一次嘗試的結果,兩者都有掛載,(false),以及'unmounting'圖像,(true)。這會導致執行我或您的'批處理文件'時出錯,如下所示:'系統找不到指定的路徑。'隨着時間的推移,另一個命令將引用預期的「掛載點」和圖像。

附錄05 - 2月 - 2017年:我發現使用的解決方案\ \ CDROMX似乎當一個增加/ 256只正常工作,否則它可能會失敗,以下消息:

2017年2月5日01:11:15錯誤53(0x00000035)訪問源目錄\。\ CDROM0 \ 未找到網絡路徑。

我希望這可以幫助人們,這已經幫助了我,記事本長行設置後:72在stackoverflow上創建一個醜陋的佈局。

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 ''), '')):\" 
相關問題